摘要:
第六十一题:找出整型数组中两个只出现了一次的数(其余都出现了两遍)思路:凡是涉及到出现了两次,出现了一次的都用XOR。把所有的数都XOR一遍得到一个数tmp,这个数就是要得到的两个数的XOR。tmp肯定不为0,因为这要得的两个数一定不相等。则使用tmp为1的位可以把原数组分为两组。因为这两个数的这一位一定不同(1^0=1),所以这两个数一定各自落在一个组里,而出现了两次的同一个数也会在同一组里。重新对各个组XOR一编即可找到这个组中唯一出现一次的数了。整个过程遍历了两次数组,复杂度O(2n)=O(n)void twoSingleNum(const int *a,int cnt){ int... 阅读全文
摘要:
第七十一题:求a的b次方思路1:循环乘积思路2:half=a^(b/2) 即a^b=half*half,复杂度从O(n)降为O(logn)PS:除以二可以用>>1代替,判断可以否整除2可以用 & 1代替,位操作提高系效率。double helper(double base,int power){ if(power==1)return base; if(power==-1)return 1/base; if(power%2==0){ double half=helper(base,power/2); return half*half; }els... 阅读全文