leetcode645. 错误的集合

class Solution {
public:
        vector<int> findErrorNums(vector<int>& nums) {
        // 核心思想是这样的:
        // 假设每个人各司其职, 那么每个岗位上就是相应的人员,并且各司其职, 但是现在混入了一个
        // 闲杂人等, 他又害怕被人发现, 于是他就别人的岗位上站着, 结果等着等着, 这个岗位上应该来的人来了,
        // 他一看, 自己掩饰不过去了(毕竟人家不会跑到别的岗位上,抢别人的活干, 于是他就这么一直碰运气,
        // 一直走到那个没来上岗的那个人的岗位上去, 这样谁都不会发现他是的闲杂人等.而且每个岗位上都满员了.
            vector<int> ans;
            for (int i = 0; i < nums.size(); i++) {
                // 第一个人 应该在0位置上,因为数组下标是从0开始的,我也很无奈,
                // 岗位  1 2 3 4 5 6 
                // 下标  0 1 2 3 4 5   
                // 这样子是正常情况
                while (nums[i] != nums[nums[i]-1]) {
                    swap(nums[i], nums[nums[i]-1]);
                }
            }


            for (int i = 0; i < nums.size(); i++) {
                if (nums[i] != i+1) {
                    return {nums[i], i+1};
                }
            }
            return ans;
        }
    
};

猜你喜欢

转载自blog.csdn.net/weixin_36149892/article/details/80271237