leetcode打卡——268. 丢失的数字(简单题见真功夫)

题目


OJ平台

题目解析

  1. 排序,然后判断
  2. 原地数组交换,然后判断
  3. 由于已经知道了数据范围,而且仅缺失一个元素,所以衍生出两种做法:(1 直接求数据总和,然后减去真实总和。(2 直接和对应的下标异或,很明显留下来的就是答案。
  4. 工具法:直接用哈希表存下,然后判断

解题代码

原地数组交换法

class Solution {
    
    
public:
    int missingNumber(vector<int>& nums) {
    
    
        int n = nums.size();
        int res = n;
        for(int i=0;i<n;i++){
    
    
            while(i!=n&&nums[i]!=n&&nums[i]!=i){
    
    
                swap(nums[i],nums[nums[i]]);
            }
        }
        for(int i=0;i<n;i++){
    
    
            if(i!=nums[i])
                res = i;
        }
        return res;
    }
};

根据特点异或解法

class Solution {
    
    
public:
    int missingNumber(vector<int>& nums) {
    
    
       int n = nums.size();
       int res = 0;
       for(int i=0;i<n;i++){
    
    
           //相当于实现0^0...n^0...n,但少了n所以最后再补上。
           res ^= nums[i]^i;
       }
        return res^n;
        
    }
};

猜你喜欢

转载自blog.csdn.net/m0_50945504/article/details/121179292