Find the Duplicate Number

原创 2015年11月17日 21:13:03

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;
    }
}

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

[Leetcode]287. Find the Duplicate Number简单解法及解释 双指针复杂度O(n)

题目链接:Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is...

LeetCode 287. Find the Duplicate Number

LeetCode 287. Find the Duplicate Number 两种解法c++

Find the Duplicate Number

Find the Duplicate Number(寻找重复数)问题定义给定一个数组AA,大小为N+1N+1,且所有元素均来自前NN个自然数(1,2...,N)(1,2...,N)。显然,必然存在一个...

Leetcode 142: Linked List Cycle II & Leetcode 287: Find the Duplicate Number

Leetcode 142: Given a linked list, return the node where the cycle begins. If there is no cycle, ...
  • senliuy
  • senliuy
  • 2016年04月13日 13:48
  • 143

LeetCode----Find the Duplicate Number

Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is...

Leetcode——287. Find the Duplicate Number

题目Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), p...

287. Find the Duplicate Number

Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pr...

287. Find the Duplicate Number 找到重复出现的数

题目:给定n+1个数,这个数的范围在1 ~ n间(包括1, n ) 且,有且仅有一个重复的数。找到这个重复的数。 (重复的数可以出现很多次,但只有一个重复的数) 一看这个题目:感觉方法是很多的,可...

Array(11) -- Largest Rectangle in Histogram, Maximal Rectangle, Find the Duplicate Number

Largest Rectangle in Histogram, Maximal Rectangle, Find the Duplicate Number
  • dwt0317
  • dwt0317
  • 2016年12月31日 22:03
  • 74

[leetcode]-Find the Duplicate Number

n+1大小的数组中,数组元素范围为1到n其中只有一个数出现两次或者多次,找出重复出现的数,要求时间复杂度O(n),空间复杂度O(1)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Find the Duplicate Number
举报原因:
原因补充:

(最多只允许输入30个字)