1-找出数组中重复的数字

Posted calculus9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1-找出数组中重复的数字相关的知识,希望对你有一定的参考价值。

 力扣-面试题03. 数组中重复的数字

修改数组

不修改数组

题目描述:

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

输入:

[2,3,1,0,2,5,3]

输出:

2or3

技术图片
//把每个数放到对应的位置=>i=nums[i]
class Solution {
public:
    int duplicateInArray(vector<int>& nums) {
        int n = nums.size();
        for (auto x : nums)
            if (x < 0 || x >= n)
                return -1;
        for (int i = 0; i < n; i ++ ) {
            while (nums[nums[i]] != nums[i]) swap(nums[i], nums[nums[i]]);
            if (nums[i] != i) return nums[i];
        }
        return -1;
    }
};
修改数组
技术图片
 1  1class Solution {
 2  2 public:
 3  3     int findRepeatNumber(vector<int>& nums) {
 4  4         int n=nums.size();
 5  5         bool mark[n];
 6  6         memset (mark,0,sizeof mark);//*
 7  7         for(auto x:nums) if(x<0||x>n-1) return -1;
 8  8         for(int i=0;i<n;i++)
 9  9         {
10 10             if(mark[nums[i]]) return nums[i];
11 11             else mark[nums[i]]=1;
12 12         }
13 13         return -1;
14 14     }
15 15     }
16 16 };
hhの辣鸡代码
技术图片
 1 //计数时判定,若当前数字之前出现过则返回
 2 class Solution {
 3 public:
 4     int findRepeatNumber(vector<int>& nums) {
 5         int n=nums.size();
 6         vector<int>cnt (n,0);
 7         for(auto x:nums) if(x<0||x>n-1) return -1;
 8         for(int i=0;i<n;i++)
 9         {
10             if(cnt[nums[i]]++) return nums[i];
11         }
12         return -1;
13     }
14 };
hhの辣鸡代码

 

以上是关于1-找出数组中重复的数字的主要内容,如果未能解决你的问题,请参考以下文章

1-找出数组中重复的数字

数组中重复的数字

面试题3:找出数组重复的数字

剑指offer第1题找出数组中重复的数字

不修改数组找出重复的数字

不修改数组找出重复的数字(c语言)