[LeetCode]剑指 Offer 03. 数组中重复的数字
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 03. 数组中重复的数字相关的知识,希望对你有一定的参考价值。
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
题解一:
/**
* 剑指 Offer 03. 数组中重复的数字
* url:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
*
* @param nums 数组
* @return 重复的数字
*/
public int findRepeatNumber(int[] nums)
// 利用 Java Set 集合的无序不重复性依次将数组的元素加入到 set 中
// 加入失败则找到题目所要求的重复数字
Set<Integer> set = new HashSet<>();
for (int num : nums)
if (!set.add(num))
return num;
return -1;
题解二:
/**
* 剑指 Offer 03. 数组中重复的数字
* url:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
*
* @param nums 数组
* @return 重复的数字
*/
public int findRepeatNumber(int[] nums)
/*
* 原地交换:题目声明在长度为 n 的数组 nums 中所有的数字都在 0 ~ n-1 内,
* 那么在不存在数字重复的情况下,所有数字与其对应数组下标为一对一关系,
* 利用此特点遍历数组让对应的数字 “归位”,若归位过程中与归位位置上元素值相等,
* 则找到了重复的数字,直接返回
*/
int len = nums.length;
for (int i = 0; i < len; i++)
int cur = nums[i];
// 当前索引值与存放的元素值相等,无需归位
if (cur == i)
continue;
// 在索引为 cur 的位置上存放的元素值为 cur,则当前数字重复
if (nums[cur] == cur)
return nums[i];
// 归位:将索引为 cur 的位置上的元素值与当前位置元素值进行交换
nums[i] = nums[cur];
nums[cur] = cur;
// 重新从当前位置开始判断
--i;
return -1;
以上是关于[LeetCode]剑指 Offer 03. 数组中重复的数字的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 03. 数组中重复的数字
[LeetCode]剑指 Offer 03. 数组中重复的数字
[LeetCode]剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字(leetcode每日打卡)