Leetcode-Sqrt-牛顿逼近法:注,数学的重要性
int sqrt(int x) {
long num = x;
while(num * num > x )
{
num = (num + x/num)/2;
}
return num;
}
Leetcode-single-number
现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。
注意:
你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?
int singleNumber(int A[], int n) {
int num = 0 ;
for(int i = 0 ; i < n ; i++)
num ^= A[i];
return num;
}
A | A1 | B | 结果 |
0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 |
0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 |
从数学方面分析,就是上面的情况
a | b | A^b |
1 | 0 | 1 |
1 | 1 | 0 |
0 | 0 | 0 |
0 | 1 | 1 |
这就是一直异或的来历,A,A1相等,每位进行异或之后,一定为0,而0无论异或1或者0都等于他本身,那么从第一个开始依次一直异或的结果就是只出现一次的数。