搜索
简帛阁>技术文章>算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?

算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?

Java中  Set 和 List 集合  的contains()方法,检查数组链表中是否包含某元素
检查数组链表中是否包含某元素,使用 Set 而不使用 List  的原因是效率问题,
 前者的 set.contains()方法 实现的复杂度是O(1)、 而后者 list.contains()方法 实现的复杂度是O(n)


List特点:

元素有放入顺序,元素可重复 ,

Set特点:

元素无放入顺序,元素不可重复(

注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

附上二者contains()方法的区别对比:

​1、 Set的contains()方法:

HashSet的contains返回true,当且仅当equals返回true    ​

并且    ​hashCode返回相等的值 ;Set除了比较equals,还比较hashCode



2、List的contains()方法:

list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,加入list中有n个元素,那么会调用n次o.equals(e),

        只要有一次o.equals(e)返回了true,那么list.contains(o)返回true

算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)


简单理解: 就是变量为n的时候,算法需要对变量操作次数的量级。
简单解释:
   简单说O(n²)表示当n很大的时候,复杂度约等于Cn²,C是某个常数,简单说就是当n足够大的时候,n的线性增长,复杂度将沿平方增长。
   O(n)也是差不多的意思,也就是说n很大的时候复杂度约等于Cn,C是某个常数。
   O(1)就是说n很大的时候,复杂度基本就不增长了,基本就是个常量C。
举例解释:
要找到一个数组里面最大的一个数,你要把n个变量都扫描一遍,操作次数为n,那么算法复杂度是O(n).
用冒泡排序排一个数组,对于n个变量的数组,需要交换变量位置n^2 次,那么算法复杂度就是O(n^2 ).
有时候,如果对变量操作的次数是个多项式比如n^4+n^2+n, 就取数量级最大的那个,O(n^4)

Java中Set和List集合contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用Set而不使用List原因是效率问题,前者setcontains()方法实现
相信很多开发同伴们在研究算法、排序时候经常会碰到O(1),O(n),O(logn),O(nlogn)这些复杂度,看到这里就会有个疑惑,这个O(N)到底代表什么呢?首先o(1),o(n),o(log
相信很多开发同伴们在研究算法、排序时候经常会碰到O(1),O(n),O(logn),O(nlogn)这些复杂度,看到这里就会有个疑惑,这个O(N)到底代表什么呢?首先o(1),o(n),o(log
在描述算法复杂度时,经常用到o(1),o(n),o(logn),o(nlogn)来表示对应算法时间复杂度,这里进行归纳一下它们代表含义:这是算法时空复杂度表示。不仅仅用于表示时间复杂度,也用
1时间复杂度o(1),o(n),o(logn),o(nlogn)。算法时间复杂度时候有说o(1),o(n),o(logn),o(nlogn),这是算法时空复杂度表示。不仅仅用于表示时间复杂度
本随笔来源于《剑指offer》第二版面试官:请实现一个排序算法,要求时间效率为O(n)。应聘者:对什么数字进行排序,有多少个数字?面试官:我们相对公司所有员工年龄排序。我们公司一共有几万名员工。应
算法基础~链表~求两个链表交点(时间复杂度O(n)、空间复杂度O(1))1,接着上一篇优化思路:https://wwwcnblogscom/shan333/p/15033376html2,还记得
在LeetCode中看到判断回文程序:https://leetcodecom/problems/palindromelinkedlist/里面用单链表来存储数据,先反转前半部分单链表,然后分别从表
importjavautilScanner;/***迪杰斯特拉算法:单源点到其他点最短路径及距离*/publicclassPtest{//不能设置为IntegerMAX_VALUE,否则两个Int
快速排序作为随机算法一种,不能通过常规方法来计算时间复杂度wiki上有三种快排平均时间复杂度分析,本文记录了一种推导方法。先放快速排序伪代码,便于回顾、参考quicksort(intL,intR