//每天各种生活琐事简直焦头烂额
//感觉毕业后就可以过上失业的生活了
//所以说被打乱节奏以至于还没找到工作的我对于“拥抱变化”神马的还是有点怨念
//其实还是自己的锅啦
//好像节奏有点慢废话有点多嘤
136 Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
------------------------------
解法1:
其实第一反应是建一个hash然后统计每个值出现了几次,没有的就加进去,出现过一次的就更新出现次数,最后查找输出value=1的那个……
然而理想是美好的,现实是残酷的
因为键值没法直接更新,map也不能直接按照value来查找key
所以退而求其次想到循环两次
public class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int result = 0;
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
map.remove(nums[i]);
} else {
map.put(nums[i], 1);
}
}
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
result=nums[i];
break;
}
}
return result;
}
}
非常蠢的办法,中心思想就是当某个值第一次出现的时候加到map里面,如果第二次出现就删掉
【其实用不用map用list,set之类的也没差吧=.=//】
总之最后就只剩下一个值了
然后再循环一次原集合,找到还在map里的那个数输出就可以了。
解法2:
public class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
result=result^nums[i];
}
return result;
}
}
然而并没有学过的我还是从小师弟那边听来的这个词。
然后可以发现不管第一个数值是啥,result的第一次更新都会是第一个数,于是还可以再升级版直接把result=0省略掉,在序列上面更新就可以了。