(1)、把输入规模看成x轴,所花时间/空间看成y轴

O(n)就是y=x,y随x的增长而线性增长。也就是成正比,一条斜线。

O(1)就是y=1,是一个常量,不管x怎么变,y不变,一条与x轴平行的线。

(2)、举个简单的例子,要从0加到n,我们会这么写:

int sum = 0;
for(int i = 0;i<=n;++i) {
sum + = i;
}

一共算了n次加法,那么就说这个时间复杂度是O(n)。当然O(n)的精确的概念是,是n的最高次方,比如,某个计算共计算了3n+2次,那么这个时间复杂度也是O(n),因为3n+2中的最高次方是n。

如果代码这么写:

int sum = 0;
for(int i = 0;i<= n;i++) {
for(int j = 0;j<= n;j++) {
sum + = (i + j);
}
}

  

很明显一共算了n^2次加法,那么就说这个时间复杂度是O(n^2),和这个上面的类似,如果某个算法计算了3*n^2+n+1次,其时间复杂度仍然是O(n^2),因为3*n^2+n+1中的最高的次方是n^2,所谓O1就是计算的次数是常量,我们还以上面从0到n的例子来说,如果我们用等差数列的公式,那么,代码可以这么写:

int sum = n*(n+1)/2

不管n有多大(当然不能溢出了),通过上面的公式只需要计算一次,也就是说计算的次数是不变的,这种情况的时间复杂度就可以说成O(1),再比如这个计算,不管其他条件如何变化,均只计算5次就能计算出结果,那么这种情况就是时间复杂度,也就是O(1)。

(3)、

要在hash表中找到一个元素就是O(1)

要在无序数组中找到一个元素就是O(n)

访问数组的第n个元素是O(1)

访问链表的第n个元素是O(n)

也就是说:

如果实现中没有循环就是O(1)

如果实现中有一个循环就是O(n)

(4)、算法复杂度:算法复杂度分为时间时间复杂度和空间复杂度。其作用是:时间复杂度是度量算法执行时间的长短;而空间复杂度是指算法所需存储空间的大小。

时间复杂度On和空间复杂度O1是什么意思?的更多相关文章

  1. 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题

    先看看这个题目:某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C代码求出这两个单身整数. 要求: 时间复杂度o(n), 空间复杂度o(1). 我们先用最傻瓜的方式来做吧: #inc ...

  2. 反转链表,时间复杂度O(n),空间复杂度O(1)

    原理:使用三个指针,p,q指向交换的元素,r指向后续元素 代码如下: class Node{ int data; Node next; Node(int data){ this.data=data; ...

  3. 时间复杂度O(n),空间复杂度O(1)解斐波那契数列

    #include <stdio.h> #include <iostream> using namespace std; long long fibs1(int in_iN) { ...

  4. (转载)o(1), o(n), o(logn), o(nlogn) 时间复杂度

    o(1), o(n), o(logn), o(nlogn) 时间复杂度的解释: https://blog.csdn.net/yhc166188/article/details/81162865 时间复 ...

  5. C#中常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...

  6. 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度

    第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...

  7. 给定一数组,输出满足2a=b(a,b代表数组中的数)的数对,要求时间复杂度尽量低。

    //时间复杂度O(n),空间复杂度O(n) void findSequence(int* arr, int len) { int* hashtable = new int[RANGE]; memset ...

  8. 动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways

    引言 一维动态规划根据转移方程,复杂度一般有两种情况. func(i) 只和 func(i-1)有关,时间复杂度是O(n),这种情况下空间复杂度往往可以优化为O(1) func(i) 和 func(1 ...

  9. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

随机推荐

  1. 动态规划-----hdu 1024 (区间连续和)

    给定一个长度为n的区间:求m段连续子区间的和 最大值(其中m段子区间互不相交) 思路: dp[i][j]: 前j个元素i个连续区间最大值 (重要 a[j]必须在最后一个区间内) 转移方程:dp[i][ ...

  2. manjaro初体验

    manjaro Linux是https://distrowatch.com/网站上排名第一的Linux分支. https://manjaro.org/ 选择,下载,打开主页下载页:https://ma ...

  3. fedora的选择

    Fedora 首页包含3种版本: 工作站,服务器,ATOMIC 个人只要使用工作站即可,然后,下载界面有另一个选择:Silverblue ========================== Silv ...

  4. Python的文件处理

    引子 1.问题:给你一个文件 "兼职白领学生空姐模特护士联系方式.txt" ,如何查看内容? 答: 安装文本编辑器软件 选中右键,利用文本编辑器软件打开 查看 or 写入 保存,关 ...

  5. Python基础( )

    一. 文件修改 f = open("yesterday.txt",'r') f1 = open("yesterday2.txt",'w') for line i ...

  6. .closest 样例收集

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  8. Redis源码剖析和注释(七)--- 快速列表(quicklist)

    Redis 快速列表(quicklist)1. 介绍quicklist结构是在redis 3.2版本中新加的数据结构,用在列表的底层实现. 通过列表键查看一下:redis 列表键命令详解 127.0. ...

  9. keycloak docker-compose 运行

    内容很简单,主要是搭建一个可运行的keycloak 环境,方便开发测试,同时支持数据库的持久化 docker-compose 文件 version: "3" services: a ...

  10. tile38 roaming-geofences 试用

    tile38 支持动态实时的移动对象的数据监控 环境准备 docker-compose 文件 version: "3" services:  app:    image: tile ...