给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
示例 :
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/missing-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
想到了两种解法,第一种是求和相减
class Solution {
public int missingNumber(int[] nums) {
int sum1=sum(nums.length),sum2=0;
for(int i=0;i<nums.length;i++){
sum2+=nums[i];
}
return sum1-sum2;
}
public int sum(int n){
if(n==1)return 1;
else return n+sum(n-1);
}
}
第二种是效率更高的位运算 (出现了两次的数字异或运算后都为0,剩下的那一个与0做异或运算就等于其本身即“丢失的数字”)
class Solution {
public int missingNumber(int[] nums) {
int res=0;
for(int i=1;i<=nums.length;i++){
res^=nums[i-1]^i;
}
return res;
}
}