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.

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.

思考路线:

1) 排序后遍历:不符合条件1的要求,数组不可改;

2) map:不符合条件2的要求,O(n)的空间复杂度。

思路:针对2,想起了First Missing Number的解法,数组既保存原有数组信息,又保存map信息。直接遍历数组nums,

遍历到元素i,将nums[i]置为-1*nums[i],此时nums[i]为负;若下次又遍历到i,即可检查到nums[i]为负,即可知道数字i为Dumplicate数。

误区:写的过程中,进入误区了,只要遍历遇到i,则将nums[i]置为-1*nums[i],遍历完后再次遍历,若是有负数,即对应的下标为

Dumplicate数。这样考虑是因为以为只会重复两次,但是题目并没有这么说,即如果存在多次(比如偶数次),最后还是可能转为正数。

代码:

public class Solution {
    public int findDuplicate(int[] nums) {
        int index, length = nums.length, result = 0;
        for(int i = 0; i < length; i++) {
        	index = nums[i];
        	if(index < 0) {
        		index *= -1;
        	}
        	if(nums[index] < 0) {
        	    result = index;
        	    break;
        	} else {
        		nums[index] *= -1;
        	}
        }
        return result;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 20:37:01

Find the Duplicate Number的相关文章

leetcode Find the Duplicate Number

题目连接 https://leetcode.com/problems/find-the-duplicate-number/ Find the Duplicate Number Description 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.

[LeetCode] 287. Find the Duplicate Number(Floyd判圈算法)

传送门 Description 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. Note: You mu

LeetCode 287. Find the Duplicate Number

Find the Duplicate Number | LeetCode OJhttps://leetcode.com/problems/find-the-duplicate-number/ 这个题目属于编码比较简单但解法分析过程比较复杂. 首先,把1~n放入0~n个元素,必定有两个或以上元素重复.数字里没有0,所以从下标0出发不会再回到最初的元素0. 假设当前的下标为x,下一步的下标为f(x),若f(x) = A[x], 也即每次跳到一个元素,则下一步移动到当前元素值对应的元素下标.我们来证明

Find the Duplicate Number 解答

Question 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. Note: You must not 

&lt;LeetCode OJ&gt; 287. Find the Duplicate Number

287. Find the Duplicate Number My Submissions Question Total Accepted: 18097 Total Submissions: 48596 Difficulty: Hard Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate

【LeetCode从零单刷】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. Note: You must not modif

287. Find the Duplicate Number *HARD*

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. Note: You must not modify th

LeetCode-Cycle Detection,Find the Duplicate Number

      本来以为这题很简单,但是看要求,第一不能改变这个数组,第二只能使用O(1)的空间,第三时间复杂度小于O(n^2),就不能使用遍历数组的方式来解决了. 有两种方法,一种是利用Binary Search,一种是利用Floyd的cycle detection算法. Binary Search Method This method is based on a theroy called Pigeonhole princinpal. In mathematics,Pigeonhole prin

[LeetCode] 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 element must exist. Assume that there is only one duplicate number, find the duplicate one. Note: You must not modify t