目录
交换两个数的异或方法:
注意:这种运算的前提是要交换的两个对象ab的地址不同
arr[a] = arr[a] ^ arr[b]
arr[b] = arr[a] ^ arr[b]
arr[a] = arr[a] ^ arr[b]
2的n次方的移位算法
2^n == 1<<n
(2^5) ==1<<5
判断偶数:
(newArr.length & 1) == 0
计算中值的方法
-
普通的mid=(min+max)/2 这种会存在溢出的风险,比如数组长度开的过大,导致min+max超过了最大表示的值
-
可以使用mid=min+(max-min)/2
-
更高级的,可以采用移位运算,如mid=min+(max-min)>>1,这种操作运算更快
master公式
一系列子问题的规模都为等规模的递归行为的时间复杂度的估算
T(N) = a*T(N/b) + O(N^d)
-
T:表示问题的数据量
-
a:表示划分母问题后子问题的个数
-
b:表示分段的范围,通常分成两等份就是N/2,三分之二等分就是2/3*N,三等分就是1/3*N(注意,子问题规模一定是等分的,2/3等分法会有中间的1/3的部分重叠,如果子问题规模不是等分的则不能使用该公式)
-
O:其他运算的时间复杂度
1)log(b,a)>d ->复杂度为O(N^log(b,a))
2)log(b,a)=d ->复杂度为O(N^d*logN)
3)log(b,a)<d ->复杂度为O(N^d)