您的当前位置:首页正文

4.力扣刷题之消失的数字

来源:华佗健康网


题目:

思路

思路一:遍历数组nums,将数组中的元素加入到哈希集合中,然后依次从0到n检查是否在哈希集合中,如果不在则是我们要找的数字。

思路二:数组nums中有n个数,在这n个数的后面添加从0到n的每个整数,则添加了n+1个整数,共有2n+1个整数。在2n+1个整数中,消失的数字只在后面n+1个整数中出现一次,其余的数字在前面n个整数中和后面n+1个整数中各出现一次,即其余的数字都出现了两次。

根据出现的次数的奇偶性,可以使用按位异或运算得到消失的数字。按位异或运算满足交换律和结合律,且对任意整数x都满足x^x=0和x^0=x;

解题

class Solution {
public:
    int missingNumber(vector<int>& nums) {
      //1.哈希表 
      unordered_set<int> set;
      int n=nums.size();//数组的大小
      for(int i=0;i<n;i++)
      {
          //将数组放入哈希集合中
         set.insert(nums[i]);
      }
      int miss=-1;
      for(int i=0;i<=n;i++)
      {
          //遍历查看有哪个数是哈希集合中没有的
          if(!set.count(i))
          {
              miss=i;
              break;
          }
      }
      return miss;
    }
};

class Solution {
public:
    int missingNumber(vector<int>& nums) {
     //2.异或
     int x=0;
     for(int i=0;i<nums.size();i++)
     {
         x^=nums[i];
     }
     for(int i=0;i<=nums.size();i++)
     {
         x^=i;
     }
     return x;
    }
};

因篇幅问题不能全部显示,请点此查看更多更全内容