0
点赞
收藏
分享

微信扫一扫

力扣:剑指 Offer 03. 数组中重复的数字

笙烛 2022-04-29 阅读 74

题目链接:剑指 Offer 03. 数组中重复的数字
题目

示例 1:

限制:

  • 2 <= n <= 100000

代码(c++)
方案一:哈希表
建立一个哈希表hash,在循环遍历nums数组时,判断当前元素是否能在hash表中找到,如果不能找到,则将元素插入到hash表中,否则,这个元素重复了,定义一个整型变量 ans 记录这个重复数,然后返回ans。

//哈希表
//限制:2 <= n <= 100000
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        unordered_map<int, int> hash;
        int ans = nums[0];
        for (int x : nums) {
            if (hash.count(x)) {    //在hash表中找到了x
                ans = x;
                break;
            }
            hash[x]++;
        }
        return ans;
    }
};

方案二:排序
先用sort方法将nums数组进行排序,然后用一个循环遍历nums数组,在里面判断,如果元素和前一个元素值相等,则这个数重复,注意这个循环因子从1开始。

//排序
//限制:2 <= n <= 100000
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int i;
        for (i = 1; i < nums.size(); ++i) {	//注意i从1开始
            if (nums[i] == nums[i - 1]) {	//如果元素和前一个元素值相等
                break;
            }
        }
        return nums[i];
    }
};
举报

相关推荐

0 条评论