LeetCode 面试题 17.19 消失的两个数字[排序] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 面试题 17.19 消失的两个数字[排序] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
一个并不是特别完美的解法,时间复杂度稍高于O(N),但是特别好理解,这个方法就是桶排序。在数组的后面加上两个-1构成桶,遍历数组,不断交换,直到遇到-1或者下标就等于自己(下标为值-1),最后重新遍历数组,-1所在的下标+1就是空缺的数,代码如下:

class Solution 
public:
    vector<int> missingTwo(vector<int>& nums) 
        vector<int> ans;
        nums.push_back(-1);
        nums.push_back(-1);
        int n = nums.size();
        for(int i = 0; i < n; i ++) 
            // 不是-1且未就位,需要多次交换
            while(nums[i] != -1 && nums[i] != i + 1) 
                swap(nums[i], nums[nums[i] - 1]);
            
        
        for(int i = 0; i < nums.size(); i ++) 
            if(nums[i] == -1) ans.push_back(i + 1);
        
        return ans;
    
;

以上是关于LeetCode 面试题 17.19 消失的两个数字[排序] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

面试题 17.19. 消失的两个数字 : 简单数学运用题

LeetCode 面试题 17.19. 消失的两个数字

力扣leetcode 面试题消失的数字题解

Leetcode刷题日记(2020.7.13)程序员面试经典:消失的两个数字

Leetcode -面试题17.04.消失的数字 -189.轮转数组

#yyds干货盘点# LeetCode面试题:两数相加