1.认识时间复杂度
所谓时间复杂度,其实就是估计常数操作的一个指标
1)常数
int a = arr[i] 这就是一个常数操作,不管你数组有多大
int b = list.get(i) 链表就不是一个常数操作,串行,不知道他next指针指到哪去
+ - * / 位运算 a+b 都是一个常数操作
跟数据量无关的,是一个固定操作,我们就管他叫常数
n + n-1 + n-2 +n-3 ....
n + n-1 + n-2 +n-3 ....
n
n方+
(n+ 1)n /2
a n放+b n +c
o(n²)
不要低阶项,只要最高项
异或运算
不同为1,相同为0,无进位相加
1) 0^ n = n n^n=0
2)交换,结合 a ^ b = b ^ a (a^b^c) = a^(b^c)
必须保证a 的内存和b的内存不在一起
如果在在一个位置,比如这样,如果值一样,就相当于自己^自己,你这么做,值就会摸成0