1、问题描述
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?
很明显题目给出的array如果no missing,那么它就是一个等差数列,很明显可以通过math的方式计算;题目的tag中还给出了可以通过bitmanipulation来处理,想来想去,左移右移,与或非,异或好像都处理不了,那么还有一个bitset可以使用,给的array值恰好对应bitset的位。
3、Java AC代码
<span style="font-size:14px;">public int missingNumber(int[] nums) {
int res = (0+nums.length)*(1+nums.length)/2;
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum+=nums[i];
}
return res-sum;
}</span>
<span style="font-size:14px;">public int missingNumber(int[] nums) {
int len = nums.length+1;
int index = 0;
BitSet bitSet = new BitSet(len);
for (int num : nums) {
bitSet.set(num);
}
for (int i = 0; i < len; i++) {
if (!bitSet.get(i)) {
index = i;
break;
}
}
return index;
}</span>