題目一:
給定一個包含 0, 1, 2, …, n 中 n 個數的序列,找出 0 … n 中沒有出現在序列中的那個數。
示例 1:
輸入: [3,0,1]
輸出: 2
示例 2:
輸入: [9,6,4,2,3,5,7,0,1]
輸出: 8
思路:
將數組中的數字用下標進行抵消,最後剩下的就是缺失的數字。
0 ^ 4 = 4
4 ^ 4 = 0
11223 = 3
代碼:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int res = nums.size();
for (int i = 0; i < nums.size(); ++i){
res ^= nums[i];
res ^= i;
}
return res;
}
};
題目二:
給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
思路:
將第一個數字和後面每一個數字異或,然後最後得到的結果就是沒有出現在序列中的那個數(相同的數字異或爲0,所以最後這些數字異或之後剩下的就是隻有一個的數字)
代碼:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int a = 0, i;
for (i = 0; i < nums.size(); ++i)
{
a = a ^ nums[i];
}
return a;
}
};