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 =
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?
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
public class Solution {
public int missingNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
for (int i = 0; i < nums.length; i++) {
int n = nums[i];
if (n < nums.length && nums[n] != n) {
nums[i] = nums[n];
nums[n] = n;
i--;
}
}
for (int i = 0; i < nums.length; i++) {
if (i != nums[i]) {
return i;
}
}
return nums.length;
}
}
2.Bitwise operation solution
public int MissingNumber(int[] nums) {
int xorResult = 0;
for(int i = 0; i < nums.Length; i++)
xorResult ^= nums[i] ^ i;
xorResult ^= nums.Length;
return xorResult;
}
3.Math solution by sum total
public int MissingNumber(int[] nums) {
int result = nums.Length * (nums.Length + 1) / 2;
for(int i = 0; i < nums.Length; i++)
result -= nums[i];
return result;
}
没有评论:
发表评论