首页 > 其他分享 >找数组中重复的数字

找数组中重复的数字

时间:2023-02-13 13:55:05浏览次数:41  
标签:数字 nums 重复 数值 int 数组

问题:数组中重复的数字,且数值小于数字size-1

  1. 方法一:利用hash,遇到重复的数字时就返回
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        unordered_map<int,bool>mp;
        for(auto i : nums){
            if(mp[i]) return i;
            mp[i] = true;
        }
        return -1;
    }
};

方法二:利用字典的性质,因数值与索引是一一对应的关系,所以将数值进行交换,达到nums[i] == i ;当nums[ nums[i] ] == nums[i] 时,即为重复出现的数字,返回。不相等就交换,并且每交换一次,就会有一个索引号和数值对应好,直到当前的索引号也对应好,执行i++,

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        int i = 0;
        while(i<nums.size()){
            if(nums[i] == i){
                i++;
                continue;
            }
            if(nums[nums[i]] == nums[i]){
                return nums[i];
            }
            swap(nums[i],nums[nums[i]]);
        }
        return -1;
    }
};

方法三:先排序sort(nums.begin(),nums.end()); 再遍历一遍数组,比较相邻两个数值,遇到相等的即为重复的数值,返回。

标签:数字,nums,重复,数值,int,数组
From: https://www.cnblogs.com/xuan01/p/17116095.html

相关文章