列表

详情


NC305. 寻找唯一重复数

描述

给定一个包含 n 个正整数的数组 nums,数组中所有数字都在区间 [1,n-1] 内,但有一个数出现了两次及以上,其余所有数字都仅出现一次。
例如 [4,2,3,1,4] ,其中 4 出现了两次。
请你找到这个重复的数。

进阶一:
请你找到一个时间复杂度为,空间复杂度为的方法

进阶二:
请你找到一个时间复杂度为O(n),空间复杂度为的方法

数据范围:

示例1

输入:

[4,2,1,3,3]

输出:

3

示例2

输入:

[1,2,3,4,5,6,7,8,9,9]

输出:

9

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 21ms, 内存消耗: 3264KB, 提交时间: 2022-06-30

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findRepeatNum(vector<int>& nums) {
        // write code here
        vector<int>count(nums.size(), 0);
        for(auto n : nums){
            if(count[n] == 1) return n;
            else count[n] ++;
        }
        return 0;
    }
};

C++ 解法, 执行用时: 21ms, 内存消耗: 3268KB, 提交时间: 2022-04-03

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findRepeatNum(vector<int>& nums) {
        // write code here
        int l=0,r=nums.size()-1;
        int ans=2;
        while(l<=r)
        {
            int m=(l+r)/2;
            int cnt=0;
            for(int i=0;i<nums.size();i++)
                if(nums[i]<=m)
                    cnt++;
            if(cnt<=m)
                l=m+1;
            else
            {
                r=m-1;
                ans=m;
            }
        }
        return ans;
    }
};

C++ 解法, 执行用时: 21ms, 内存消耗: 3272KB, 提交时间: 2022-06-09

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findRepeatNum(vector<int>& nums) {
        // write code here
        int l=0,r=nums.size()-1;
        int res=2;
        while(l<=r){
            int m=(l+r)/2;
            int c=0;
            for(int i=0;i<nums.size();i++){
                if(nums[i]<=m){
                    c++;
                }
            }
            if(c<=m) l=m+1;
            else{
                r=m-1;
                res=m;
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 23ms, 内存消耗: 3264KB, 提交时间: 2022-03-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findRepeatNum(vector<int>& nums) {
  int slow = 0, fast = 0;
  do {
    slow = nums[slow];
    fast = nums[nums[fast]];
  } while (slow != fast);
  slow = 0;
  while (slow != fast) {
    slow = nums[slow];
    fast = nums[fast];
  }
  return slow;
    }
};

C++ 解法, 执行用时: 23ms, 内存消耗: 3268KB, 提交时间: 2022-03-05

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findRepeatNum(vector<int>& nums) {
        // write code here
        int n = nums.size();
        int slow = 0, fast = 0;
        do {
            slow = nums[slow];
            fast = nums[fast];
            fast = nums[fast];
        }while(slow != fast);
        slow = 0;
        while(slow != fast) {
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;
    }
};

上一题