题目:
题目很简单,意思就是我有 从 0 到 n 的自然数,但我的序列只有 n-1个长度,找到缺失的那个数字。
思路1:排序,找到元素和对应下标不相等的那个就ok了
思路2: HashSet集合,我们把元素都存储再HashSet集合中,HashSet集合只能存放Key,Value是HashSet统一提供的Object,我们只需要 contains()从0 到 数组长度的即可,哪一个找不到,也就是返回为false,哪一个就是缺失的元素,
public int missingNumber(int[] nums) {
HashSet<Integer> hashSet = new HashSet();
for(int i = 0 ; i < nums.length;i++){
hashSet.add(nums[i]);
}
for(int i = 0; i < nums.length+1;i++){
if(!hashSet.contains(i)){
return i;
}
}
return -1;
}
思路三:位运算,自己 与 自己 异或运算,相等就会变成0,最后因为总共有 0 - n 个数 , 缺失的位置由于没有与它对应的数字进行异或所以无法消除,所以最后异或下来,就是 0 ^ 缺失位置,最后结果就是缺失位置
public int missingNumber(int[] nums) {
int missingnumber = nums.length;
for(int i = 0;i<nums.length;i++){
missingnumber ^= i ^ nums[i];
}
return missingnumber;
}