給出一個包含 0, 1, 2, ..., n
中 n 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。
/**
* Created by Joe on 2018/4/7.
* 268. Missing Number
* https://leetcode.com/problems/missing-number/description/
*/
public class P268 {
public int missingNumber(int[] nums) {
int sum = 0;
for(int num: nums)
sum += num;
return (nums.length * (nums.length + 1) )/ 2 - sum;
}
}
因爲假定的是一個連續的序列找缺失數字,所以相當於等差數列求和再減去所給的所有數就是所得。
但是這個方法還是比較笨重,而且有數據溢出的風險,評論區有一個位操作的方法很好。
public int missingNumber(int[] nums) {
int xor = 0, i = 0;
for (i = 0; i < nums.length; i++) {
xor = xor ^ i ^ nums[i];
}
return xor ^ i;
}
其主要思路是異或操作,異或操作a^b^b =a
,如果有兩個相同的數字進行了^
操作,這個數字就會被抵消。