算法的复杂度【数据结构】

news2024/11/27 14:41:00

1、时间复杂度

  • 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源,因此衡量一个算法的好坏一般是从时间和空间两个维度来衡量的,即时间复杂度空间复杂度
  • 时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。

(1)时间复杂度只保留最高阶项

在这里插入图片描述

(2)同级别的未知数不能省略

在这里插入图片描述

(3)常数次的时间复杂度为O(1)

在这里插入图片描述

(4)常数×未知数,常数可以省略

在这里插入图片描述

(5)关注算法的最坏运行情况

在这里插入图片描述

(6)冒泡排序O(N^2)

在这里插入图片描述

(7)二分查找O(log2(N))

在这里插入图片描述

(8)递归调用对比

在这里插入图片描述

(9)斐波那契递归O(2^N)

在这里插入图片描述

(10)Leetcode题目链接:消失的数字

  • 方法1:排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字 【O(N*log2(N))】
  • 方法2:异或法 【O(N)】
int missingNumber(int* nums, int numsSize)
{
     int x=0;
     for(int i=0;i<numsSize;i++)
     {
         x=x^nums[i];
     }
     for(int i=0;i<numsSize+1;i++)
     {
         x=x^i;
     }
     return x;
}
  • 方法3:0~N等差数列求和,再减去数组中已有的数 【O(N)】
int missingNumber(int* nums, int numsSize)
{
    int x = (0 + numsSize) * (numsSize + 1) / 2; //等差数列求和
    for (int i = 0; i < numsSize; i++)
    {
        x = x - nums[i];
    }
    return x; //缺失的数=等差数列的和-数组中已有的数
}

2、空间复杂度

  • 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用额外存储空间大小的量度
  • 空间复杂度不是程序占用了多少bytes的空间,空间复杂度算的是变量的个数
  • 注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定

(1)冒泡排序O(1)

(2)斐波那契递归O(N)

在这里插入图片描述

(3)阶乘递归O(N)

在这里插入图片描述

(4)Leetcode题目链接:轮转数组

在这里插入图片描述

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void reverse(int arr[], int start, int end)
{
    while (start < end)
    {
        swap(&arr[start], &arr[end]);
        start++;
        end--;
    }
}

void rotate(int* nums, int numsSize, int k)
{
    //方法一:
    // int temp=0;
    // for(int i=0;i<k;i++)
    // {
    //     temp=nums [numsSize-1];
    //     for(int j=numsSize-1;j>0;j--)
    //     {
    //         nums[j]=nums[j-1];
    //     }
    //     nums[0]=temp;
    // }

    //方法二:
    // int newArr[numsSize];
    // for (int i = 0; i < numsSize; i++)
    // {
    //     newArr[(i + k) % numsSize] = nums[i];
    // }
    // for (int i = 0; i < numsSize; i++)
    // {
    //     nums[i] = newArr[i];
    // }

    //方法三:
    k = k % numsSize; //k可能比数组大,在这种情况下,向右移动整个数组长度后就回到原来的位置,k%numsSize就是去掉每次回到原来位置的步数,获得能够产生相同结果的最少步数
    reverse(nums, 0, numsSize - 1);
    reverse(nums, 0, k - 1);
    reverse(nums, k, numsSize - 1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins安装配置

前言&#xff1a;Jenkins是一款CICD&#xff08;持续集成与持续交付&#xff09;工具。Jenkins可以帮你在写完代码后&#xff0c;一键完成开发过程中的一系列自动化部署的工作。 Jenkins 2.346.1 版本支持 jdk1.8 和 jdk11&#xff0c;最后一版支持jdk1.8的版本。 安装Jenkins前…

windows修改Pycharm的右键打开方式

title: windows中open floder as Pycharm太长了怎么修改 date: 2023-06-04 author: IoT_H2 tags: windows系统问题 categories: Markdown 问题描述&#xff1a; Pycharm这一栏这么长&#xff0c;长的我实在是很难受&#xff0c;事实上Jetbrains家的软件都是这个鸟模样 导…

RocketMq的单机版安装以及可视化软件的安装

一 RocketMq的单机版安装 1.1 RocketMq的上传 1.2 解压 [rootlocalhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 1.3 修改配置 使用 vim 命令打开 bin/runserver.sh 文件。现将这些值修改为如下&#xff1a; [rootlocalhost bin]# vi runserver.sh 使用vim命令…

tinkerCAD入门操作(3):创建和操作分组对象

tinkerCAD入门操作(3)&#xff1a;创建和操作分组对象 介绍 我们现在将探索Tinkercad的超能力 - 组合简单的形状来制作复杂的对象。 组合形状是实体建模的基本目的。这就是汽车、建筑物和宇宙飞船等有趣东西的制作方式。现在&#xff0c;我们要教你这个超能力。 创建复合形状…

Stable-Diffusion|window10安装GPU版本的 Stable-Diffusion-WebUI遇到的一些问题(一)

教程主要参考&#xff1a; AI绘画第一步&#xff0c;安装Stable-Diffusion-WebUI全过程 ! Stable Diffusion WebUI使用手冊(正體中文)&#xff5c;Ivon的部落格 具体记录一下笔者除了按照上述教程&#xff0c;遇到坑的地方 文章目录 1 git PYTHON2 Nvidia设置3 stable-diffus…

如何解决构建安防监控系统的技术难点?快解析来助力

在安防领域,大数据具有广阔的应用场景,能带来深度的价值。随着应用普及越来越广&#xff0c;安防监控系统被人们日益重视起来&#xff0c;科技含量越来越高&#xff0c;几乎所有高新科技都可促进其发展&#xff0c;尤其是信息时代的来临&#xff0c;更给该专业的发展提供了契机…

2023年全球项目管理系统排行榜:推荐15家值得关注的项目管理系统

在当今世界&#xff0c;管理项目已经成为许多企业不可分割的一部分。因此&#xff0c;拥有正确的项目管理系统对于确保任何业务的成功都是至关重要的。随着技术的不断发展&#xff0c;好用的项目管理系统也在不断发展&#xff0c;以满足现代工作场所日益增长的需求。到2023年&a…

区间预测 | MATLAB实现基于QRCNN-BiGRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资…

设计模式之-模板方法模式C++实现与C++模板template使用

介绍 模板方法模式使用比较常见&#xff0c;也比较简单&#xff0c;模板方法模式是属于设计模式中的行为设计模式。行为设计模式是关注对象的行为或者交互方面的内容&#xff0c;主要涉及算法和对象之间的职责分配。 模板方法模式使用场景&#xff1a;在设计需求中&#xff0c;…

超详细IDEA创建MavenWeb项目

文章目录 一、环境准备二、骨架方式创建Maven-Web项目三、非骨架方式创建Maven-Web项目 一、环境准备 既然是创建Maven-Web项目&#xff0c;那么首先我们需要配置好Maven和JDK环境&#xff0c;这里笔者使用JDK8版本以及Maven3.6系列版本。 附Maven安装配置教程 超详细Maven安装…

【CesiumJS入门】(2)ImageryLayer之图层加载与管理

前言 在上一篇博客中&#xff0c;我们加载了一个空空的蓝色地球&#xff0c;现在我们将会为地球加载上地图。 步骤&#xff1a; 创建ImageryProvider &#xff08;数据源&#xff09;创建ImageryLayer &#xff08;图层&#xff09;将图层添加进视图中&#xff08;viewer&…

ChatGPT中文版写论文神器使用技巧

又到了一年一度的毕业季&#xff0c;写论文成了同学们的头等大事。ChatGPT系当今世上最强的人工智能产品&#xff0c;已经深刻地影响着人们的工作生活学习。ChatGPT也是写论文的神器&#xff0c;能帮助同学们拓宽思路&#xff0c;举一反三&#xff0c;事半功倍。以面给同学们盘…

六、JSP06 使用 EL 和 JSTL 简化 JSP

六、使用 EL 和 JSTL 简化 JSP 6.1 使用 EL 表达式 EL 表达式借鉴了 JavaScript 和 XPath 的表达式语言 EL 表达式提供了一种在 JSP 中简化表达式的方法 EL 表达式通常用于在某个作用域 {page、request、session、application等} 内取得属性值 6.1.1 使用 EL 表达式 EL 表达式…

【019】C++的指针与函数

C的指针与函数 引言一、指针变量作为函数的参数1.1、单向传递&#xff1a;值传递1.2、单向传递&#xff1a;传地址 二、数组作为函数的参数传递三、函数的返回值类型是指针类型四、函数指针4.1、函数指针的定义4.2、函数指针变量的注意事项4.3、函数指针变量使用typedef定义别名…

rabbitmq死信队列详解

目录 1 概念 2 成为死信队列的条件 2.1 队列指定长度 2.2 消息ttl时间 2.3 消费者拒收消息 1 概念 死信队列&#xff1a;死信队列其实和普通的队列一样&#xff0c;只不过里面存放的消息都是普通队列过期没有消费的。所以&#xff0c;接收没有及时被消费消息的队列为死信…

[SWPUCTF 2021 新生赛] (WEB二)

目录 easyupload1.0 easyupload2.0 easyupload3.0 no_wakeup PseudoProtocols error hardrce pop sql finalrce hardrce_3 easyupload1.0 1.启动环境 2.上传一个图片木马 GIF89a <script languagephp>eval($_POST[a]);</script>3.蚁剑连接&#xff0c;…

VBScript深度学习入门——线性回归

背景 破电脑装不了VS、Py、IDea、Golang等主流编译器或其语言运行环境&#xff0c;但是自带.Net FrameWork 3.5&#xff0c;可以使用VBScript进行脚本编写&#xff0c;无所谓&#xff0c;反正都是了解底层原理学习&#xff0c;大不了手搓机器学习框架。 分析 了解线性回归的…

剑指 Offer 24. 反转链表解题思路

文章目录 题目解题思路 题目 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制&#xff1a; 0 < 节点个数 < 5000 …

去过门头沟吗?

门头沟&#xff08;Mt.Gox&#xff09; 1. 成立2. 发展3. 危机4. 后续 1. 成立 MtGox是程序员杰德麦凯莱布&#xff08;Jed MeCaleb&#xff09;在比特币论坛的用户名。2007年&#xff0c;麦凯莱布开发了魔法风云会线上交易平台&#xff1a;门头沟&#xff08;Mt.Gox&#xff…

【数据分析之道-Matplotlib(六)】Matplotlib饼图

文章目录 专栏导读1、Matplotlib饼图pie()语法格式2、设置饼图各个扇形的标签与颜色3、突出显示第二个扇形&#xff0c;并格式化输出百分比4、shadows通过将参数设置为&#xff1a;向饼图添加阴影 True5、使用legend()函数为每个楔形添加解释列表6、将title参数添加到legend 函…