标签:
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