268_丢失的数字_2021.11.6
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
采用了unorderd_map进行题解,个人代码如下:
unordered_map<int, int> mapKnumVtime; int missingNumber(vector& nums) { unordered_map<int, int> mapKnumVtime; for (int i = 0; i < nums.size(); i++) { mapKnumVtime[nums[i]]++; } for (int i = 0; i <= nums.size(); i++) { if (mapKnumVtime.count(i) == 0) return i; } return -1; }
同时学习了官方题解的其余答案,代码如下:
①排序再匹配下标
int missingNumber2(vector<int>& nums) { sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size(); i++) { if (i != nums[i]) return i; } return nums.size(); }
②排序再匹配下标
int missingNumber2(vector<int>& nums) { sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size(); i++) { if (i != nums[i]) return i; } return nums.size(); }
③哈希集合
int missingNumber3(vector<int>& nums) { unordered_set<int> set; int n = nums.size(); for (int i = 0; i < n; i++) { set.insert(nums[i]); } int missing = -1; for (int i = 0; i <= n; i++) { // 如果不存在该元素则返回0 if (!set.count(i)) { missing = i; break; } return missing; }
④位运算
int missingNumber4(vector<int>& nums) { //对于一个整数而言,它与自身的异或为0,而0与任何数字的异或结果为任何数字 int res = 0; int n = nums.size(); for (int i = 0; i < n; i++) { res ^= nums[i]; } for (int i = 0; i <= n; i++) { res ^= i; } return res; }
⑤首尾和
int missingNumber5(vector<int>& nums) { int n = nums.size(); int total = (1 + n)*n / 2; for (int i = 0; i < n; i++) { total = total - nums[i]; } return total; }