zoukankan      html  css  js  c++  java
  • [Leetcode]645.Set Mismatch

    链接:LeetCode645

    集合(S)包含从(1)(n)的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

    给定一个数组(nums)代表了集合(S)发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

    示例 1:

    输入: nums = ([1,2,2,4])
    输出: ([2,3])

    相关标签:计数排序

    利用数组的index来作为数字本身的索引,把正数按照递增顺序依次放到数组中。可参考对数组的总结。需要注意的是,在判断的时候如果出现nums[i]!=i+1并且nums[nums[i]-1] == nums[i]的条件,就说明已经找到这个重复值了,由于只有一个重复值,break即可。找miss值有个小技巧,即通过等差数列公式求和,加上重复值,减去给出的集合之和,即为缺失值。代码如下:

    python:

    class Solution:
        def findErrorNums(self, nums: List[int]) -> List[int]:
            n = len(nums)
            repeat = 0
            for i in range(n):
                while nums[i]!=i+1:
                    if nums[nums[i]-1] == nums[i]:
                        repeat = nums[i]
                        break
                    else:
                        nums[nums[i]-1],nums[i] = nums[i],nums[nums[i]-1]
            miss = (1+n)*n//2+repeat-sum(nums)
            return [repeat,miss]
    
    

    C++:

    class Solution {
    public:
        vector<int> findErrorNums(vector<int>& nums) {
            int n = nums.size();
            int miss,repeat = 0;
            vector<int> res;
            for(int i=0;i<n;i++){
                while(nums[i]!=i+1){
                    if(nums[i] == nums[nums[i]-1]){
                        repeat = nums[i];
                        break;
                    }
                    else{
                        int cur = nums[nums[i]-1];
                        nums[nums[i]-1] = nums[i];
                        nums[i] = cur;
                    }
                }
            }
            miss = (n+1)*n/2+repeat-accumulate(nums.begin(),nums.end(),0);
            res.push_back(repeat);
            res.push_back(miss);
            return res;
        }
    };
    
  • 相关阅读:
    解决百度网盘倍速需要会员问题
    npm run dev其实就是vue-cli-service serve
    git常见操作和git原理
    ajax promise三种状态
    ajax get请求
    vue2.0x methods中一个函数调用另外一个函数
    Web前端开发规范之文件存储位置规范
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
  • 原文地址:https://www.cnblogs.com/hellojamest/p/12210463.html
Copyright © 2011-2022 走看看