标签:
Note:
O(n2).
思考路线:
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;
    }
}版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/tangximing123/article/details/49893183