AC 剑指 Offer 03. 数组中重复的数字

简介: AC 剑指 Offer 03. 数组中重复的数字

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

剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。

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

示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

限制:
2 <= n <= 100000

解题思路

1)hashmap的解法很容易想到,这里不再赘述
2)认真审题,题意中说明了,数组元素必定在0~n-1的范围内 遍历nums数组,对比每个位置元素,是否是当前位置的元素,即是否满足nums[i] == i

import java.util.HashSet;

class Solution {
    public int findRepeatNumber(int[] nums) {
        // 认真审题,题意中说明了,数组元素必定在0~n-1的范围内 遍历nums数组
        // 对比每个位置元素,是否是当前位置的元素,即是否满足nums[i] == i
        for (int i = 0; i < nums.length; i++) {
            // 如果不满足,则将nums[i]换到nums[nums[i]]位置去
            if (nums[i] != i) {
                while (nums[i] != i) {
                    // 如果此时nums[i] == nums[nums[i]],则为重复元素
                    if (nums[nums[i]] == nums[i]) {
                        return nums[i];
                    } else {
                        int temp = nums[nums[i]];
                        nums[nums[i]] = nums[i];
                        nums[i] = temp;
                    }
                }
            }
            // 如果满足,则继续遍历下一个元素
        }
        return -1;
    }
}
目录
相关文章
|
8月前
|
机器学习/深度学习
剑指 Offer 15:二进制中1的个数
剑指 Offer 15:二进制中1的个数
69 0
|
4月前
|
存储 搜索推荐 C++
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
本文是作者针对《剑指 Offer(第 2 版)》中 "数组中重复的数字" 问题的刷题记录,分享了使用排序算法和相邻比较大小两种方法来找出数组中的重复数字,并提供了C++的实现代码。
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
|
3月前
|
C语言
剑指 Offer 15. 二进制中1的个数
这篇文章介绍了如何通过位运算计算一个无符号整数的二进制表示中1的个数,即汉明重量,并提供了相应的C语言函数实现。
39 0
|
8月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
29 0
|
8月前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
40 0
|
8月前
剑指 Offer 56 - I:数组中数字出现的次数
剑指 Offer 56 - I:数组中数字出现的次数
55 0
|
8月前
剑指 Offer 56 - II:数组中数字出现的次数 II
剑指 Offer 56 - II:数组中数字出现的次数 II
54 0
|
8月前
剑指 Offer 53 - I:在排序数组中查找数字 I
剑指 Offer 53 - I:在排序数组中查找数字 I
43 0
|
8月前
剑指 Offer 43:1~n 整数中 1 出现的次数
剑指 Offer 43:1~n 整数中 1 出现的次数
62 0