zoukankan      html  css  js  c++  java
  • Leetcode NO.287 Find The Duplicate Number

    1.问题描述

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

    假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。

    你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。

    2.测试用例

    示例 1:

    ​ 输入:nums = [1,3,4,2,2]
    ​ 输出:2

    示例 2:

    ​ 输入:nums = [3,1,3,4,2]
    ​ 输出:3

    示例 3:

    ​ 输入:nums = [1,1]
    ​ 输出:1

    示例 4:

    ​ 输入:nums = [1,1,2]
    ​ 输出:1

    3.提示

    • 1 <= n <= 105
    • nums.length == n + 1
    • 1 <= nums[i] <= n
    • nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次

    4.代码

    code
    public int findDuplicate4(int[] nums) {
            int n = nums.length;
            if (n < 1) {
                return -1;
            }
            //取值范围是从1 -N
            //从1开始
            int l = 1;
            //nums.length 是 n + 1; 结束到N
            int r = nums.length - 1;
    
            while (l <= r) {
                int mid = (l + r) / 2;
                int count = 0;
                for (int num : nums) {
                    if (num <= mid) {
                        count++;
                    }
                }
                if (count <= mid) {
                    l = mid + 1;
                } else {
                    r = mid;
                }
                if (l == r) {
                    return l;
                }
            }
            return -1;
    }
    
    复杂度

    时间 O(nlogn)
    空间 O(1)

    2. 快慢指针
    code
    public int findDuplicate(int[] nums) {
            int low = 0, fast = 0;
    
            do {
                low = nums[low];
                fast = nums[nums[fast]];
            } while (low != fast);
    
    
            int p1 = 0, p2 = low;
            do {
                p1 = nums[p1];
                p2 = nums[p2];
            } while (p1 != p2);
    
            return p1;
    }
    
    复杂度

    时间 O(n)
    空间 O(1)

  • 相关阅读:
    外部存储 使用详解
    内部存储 使用详解
    SQLite 使用详解
    SharePerference 使用详解
    Preference 使用详解
    Notification 使用详解
    PopupWindow 使用详解
    Fragment 使用详解
    Dialog 使用详解
    ListView 使用详解
  • 原文地址:https://www.cnblogs.com/worldline/p/15604369.html
Copyright © 2011-2022 走看看