您的位置:首页 > 编程语言 > Java开发

268. Missing Number(Java)

2017-08-11 17:50 141 查看
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.

For example,

Given nums = [0, 1, 3] return 2.

Note:

Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

代码1:

class Solution {
public int missingNumber(int[] nums) {
int len = nums.length;
int sum = (1 + len) * len / 2;
for (int n : nums)
sum -= n;
return sum;
}
}


// 相比于上面的方法可以防止溢出
class Solution {
public int missingNumber(int[] nums) {
int sum = nums.length;
for (int i = 0; i < nums.length; i ++)
sum += i - nums[i];
return sum;
}
}


代码2:利用A ^ A = 0,A ^ A ^ B = B,且满足结合律和交换律

class Solution {
public int missingNumber(int[] nums) {
int res = nums.length;
for (int i = 0; i < nums.length; i ++) {
res ^=  i ^ nums[i];
}
return res;
}
}


代码3:若数组有序,可以考虑用二分搜索

class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
int left = 0, right = nums.length, mid = (left + right) / 2;

while (left < right) {
// mid为本来应该的平均数
mid = (left + right) / 2;
// 若实际偏大,则抽走了小的数,则抽走的数在左边
if (nums[mid] > mid)
right = mid;
// 若实际偏小,则抽走了大的数,则抽走的数在右边
else left = mid + 1;
}
return left;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: