Day1-算法与数据结构-1.认识复杂度和简单排序算法

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第1张图片 

一,常数操作

例如:

int a = arr [i] ,加减乘除,位运算➡️是常数操作

int b = list.get(i) 不是常数操作,因为要在list里逐个遍历找直到i位置才能得到

常数操作:与数据量无关,是固定时间的操作

二,时间复杂度

在常数操作数量级的表达式中,只看最高阶的项且忽略其系数,写作O(看最高阶的项)

例子:

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第2张图片

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第3张图片  

若两个算法时间复杂度一样,只能通过实验判断谁更优

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第4张图片 

三,额外空间复杂度

四,冒泡排序

五,选择排序

六,异或

异或无进位相加

性质:1.0异或N=N,N异或N=0;2.满足交换律,结合律;3.一批数与一个数异或,这一批数中谁先谁后与一个数异或都无所谓

交换两个数的值而不用另一个变量:

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第5张图片

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第6张图片  

前提是a与b在内存中是不同的区域

真实的面试题:

有一个整数数组,问题1,一个数出现奇数次,其他数出现偶数次,问怎么找这一个数;问题2,两个数出现奇数次,其他数出现偶数次,如何找这两个数;要求时间复杂度为N,额外空间复杂度O(1)

做法:问题1,用一个变量设为0从头异或到尾,最后输出的变量即要找的数;

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第7张图片

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第8张图片  

问题2,用一个变量从头异或到尾,输出为a异或b,另一个变量异或

Day1-算法与数据结构-1.认识复杂度和简单排序算法_第9张图片

 

 

你可能感兴趣的:(算法,数据结构)