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

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

相关文章推荐

Find the Duplicate Number leetcode 287

题目大意:找到数组中唯一的一个重复的数值。时间复杂度要小于O(n^2),不能修改数组了。 发现一个很6的算法,把数组当成一个静态链表,也就是说nums[],数组相当于next[],0为起始节点,节点地...

Leetcode 287. Find the Duplicate Number

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

Leetcode 287. Find the Duplicate Number

Leetcode :Find the Duplicate Number(找数组中的重复元素)

Leetcode 287. Find the Duplicate Number O(n)解法和O(nlogn)解法

Find the Duplicate Number题目连接:Find the Duplicate NumberDescript Given an array nums containing n +...

Leetcode (287) Find the Duplicate Number

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

LeetCode 287. Find the Duplicate Number(找重复数字)

原题网址:https://leetcode.com/problems/find-the-duplicate-number/ Given an array nums containing n + 1...

【Leecode】287Find the Duplicate Number找到重复的数

找到重复的数给一个数组包含n+1个整数,每个整数都是在1到n之间(包括n),证明至少存在一个重复数字。假设只有一个重复的数字,找出这个数 不能修改这个数组,只能用一个常数的额外空间,运行时间复杂度少于...

leetcode之Find the Duplicate Number 问题

问题描述: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusi...

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)。显然,必然存在一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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