寻找唯一的单个数
题目:https://leetcode.com/problems/single-number/
武器:利用map计算次数,线性时间。但是需要O(n)存储空间
结果:未通过
新武器:XOR操作
异或的运算方法是一个二进制运算:
1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.
(1) a ^ b = b ^ a;
(2) (a ^ b) ^ c = a ^ (b ^ c);
(3) a ^ a = 0, a ^ 0 = a;
the ^ means XOR.
a ^ b ^ b ^ c ^ c = a ^ 0 ^ 0 = a,只有一个单个元素,所以最后异或的结果就是单个数字。
class Solution {
public int singleNumber(int[] nums) {
int result=0;
for(int i=0;i<nums.length;i++){
result^=nums[i];
}
return result;
}
}
移动0到数组尾部
题目:https://leetcode.com/problems/move-zeroes/
武器: 两个指针,基于交换。但是比较麻烦。简单思路是直接覆盖
结果:未通过
新武器:如果是0,没有必要交换,直接覆盖,最后空余位置直接添加0就可以。