码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-03-27 10:59:34      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:出现   str   i++   return   find   leetcode   nbsp   wap   题目   

 力扣-面试题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-找出数组中重复的数字

标签:出现   str   i++   return   find   leetcode   nbsp   wap   题目   

原文地址:https://www.cnblogs.com/Calculus9/p/12579582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!