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之路的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题日记(2020.7.13)程序员面试经典:消失的两个数字