寒光博客

[LeetCode]287. 寻找重复数
题目 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少...
扫描右侧二维码阅读全文
07
2020/07

[LeetCode]287. 寻找重复数

题目

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出
这个重复的数。

输入: [1,3,4,2,2]
输出: 2

输入: [3,1,3,4,2]
输出: 3

说明:

 不能更改原数组(假设数组是只读的)。 
 只能使用额外的 O(1) 的空间。 
 时间复杂度小于 O(n2) 。 
 数组中只有一个重复的数字,但它可能不止重复出现一次。

Related Topics 数组 双指针 二分查找

分析及反思

快慢指针
floyd判环(圈)算法 https://blog.csdn.net/u012534831/article/details/74231581
https://leetcode-cn.com/problems/find-the-duplicate-number/solution/kuai-man-zhi-zhen-yi-kan-jiu-dong-by-wjhk/

代码

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0, quick = 0;
        //查找相遇点
        //慢指针走一步
        //快指针 走两步
        while (true) {
            slow = nums[slow];
            quick = nums[nums[quick]];
            if (slow == quick) break;
        }
        //慢指针归位
        slow = 0;
        //快指针调整步调 直至重复点。
        while (true) {
            slow = nums[slow];
            quick = nums[quick];
            if (slow == quick) break;
        }
        return slow;
    }
}
本文作者:Author:     文章标题:[LeetCode]287. 寻找重复数
本文地址:http://dxoca.cn/Algorithm/371.html       百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:July 8th, 2020 at 08:36 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment