———时间复杂度排名————
1.O(1),O(logN),O(N)-------------最好的
2.O(N2),O(N3),…,O(N^K)
3.O(2N),O(2N),…,O(K^N)
4.O(N!)---------------------------最差的(暴力排列组合、穷举)
1.异或运算就是无进位相加
11=0;10=1;0^0=0;
2.异或运算满足交换率和结合律
3.不申请临时变量交换ab的值
a=a+b;
b=a-b;
a=a-b;
代码:
a=a^b;
b=a^b;
a=a^b;
“听懂同学打1”–“11111111!”
一个数提取出最右的1办法:
rightOne = num & (~num +1 );
num = 010101010110000
~num = 101010101001111
~num+1=101010101010000
num&(~num+1) = 000000000010000
OJ(Online Judge系统)是一个在线判题系统
GenerateRandomArray自己写的一个产生随机数组的方法
public static int[] generateRandomArray(int maxSize ,int maxValue){
//Math.random() ---> [0,1) double
//Math.random() * A ---> [0,A) double A->int
//(int)(Math.random()*A) ---> [0, A-1] int
int[] arr = new int[(int)((maxSize+1)*Math.random())];
for (int i=0;i<arr.length;i++){
arr[i]=(int)((maxValue +1)*Math.random()) - (int)(maxValue * Math.random());
}
return arr;
}
自己做对数器用随机样本进行大样本容量测试比OJ要强
求中点middle = (L+R)/2;--------------->整型最大21亿,有溢出为负的风险
正确应为middle = L+(R-L)/2;
num/2=num>>1;
优化后为middle = L+((R-L)>>1);-------->位移操作比除法操作更快
matser公式,模型:T(N) = aT(N/b)+O(N^d);子问题必须等规模
1)logb(a)时间复杂度O(N^d)
1)logb(a)>d---->时间复杂度O(Nlogb(a))1)logb(a)==d---->时间复杂度O(Nd*logN)