• [LC] 287. Find the Duplicate Number


    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.

    Example 1:

    Input: [1,3,4,2,2]
    Output: 2
    

    Example 2:

    Input: [3,1,3,4,2]
    Output: 3

    Note:

    1. You must not modify the array (assume the array is read only).
    2. You must use only constant, O(1) extra space.
    3. Your runtime complexity should be less than O(n2).
    4. There is only one duplicate number in the array, but it could be repeated more than once.

    Same Algorithm with LC. 142

    Time: O(N)

    class Solution {
        public int findDuplicate(int[] nums) {
            if (nums == null || nums.length == 0) {
                return -1;
            }
            int fast = nums[nums[0]];
            int slow = nums[0];
            while (fast != slow) {
                fast = nums[nums[fast]];
                slow = nums[slow];
            }
            int head = 0;
            while (head != slow) {
                head = nums[head];
                slow = nums[slow];
            }
            return slow;
        }
    }
  • 相关阅读:
    OpenCV鼠标事件
    相对复杂一些的爬虫,针对拒绝爬虫的网站
    CSS
    JS
    JS
    JS
    JS
    TypeScript
    微信小程序
    微信小程序
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12067018.html
Copyright © 2020-2023  润新知