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;
}

 

 

posted @ 2021-11-06 11:39  炫迈吃到爽  阅读(31)  评论(0编辑  收藏  举报