JAVA练习327- 寻找重复数

发布时间:2026/7/23 18:22:23
JAVA练习327- 寻找重复数 题目概览给定一个包含n 1个整数的数组nums其数字都在[1, n]范围内包括1和n可知至少存在一个重复的整数。假设nums只有一个重复的整数返回这个重复的数。你设计的解决方案必须不修改数组nums且只用常量级O(1)的额外空间。示例 1输入nums [1,3,4,2,2]输出2示例 2输入nums [3,1,3,4,2]输出3示例 3 :输入nums [3,3,3,3,3]输出3提示1 n 105nums.length n 11 nums[i] nnums中只有一个整数出现两次或多次其余整数均只出现一次进阶如何证明nums中至少存在一个重复的数字?你可以设计一个线性级时间复杂度O(n)的解决方案吗来源287. 寻找重复数 - 力扣LeetCode解题分析方法快慢指针此题解法可以参考JAVA练习294- 环形链表II-CSDN博客 方法二。因为1 nums[i] n因此我们可以用值来进行遍历以[1,3,4,2,2] 为例子遍历出的结果就是1 - 3 - 2 - 4 - 2- 4 - 2 - ....可以看出 4-2 成了一个环因此和上述所说题目一致参考上面解法即可。时间复杂度O(n)空间复杂度O(1)class Solution { public int findDuplicate(int[] nums) { int fast 0, slow 0; do { slow nums[slow]; fast nums[nums[fast]]; } while(slow ! fast); int res 0; while(res ! slow) { res nums[res]; slow nums[slow]; } return res; } }