您的位置:首页 > 其它

Find All Duplicates in an Array,leetcode,442

2017-06-26 03:56 429 查看
给出一个整型数组,数组内的值范围是[1,length],找出重复出现的值

如何不利用其它空间,在O(n)时间复杂度内求解

再三思考之后,我还是使用了额外空间,从而AC,然后看到这样的解法

public List<Integer> findDuplicates(int[] nums) {
List<Integer> result = new ArrayList<Integer>();
for(int i =0 ; i<nums.length; i++){
int index = Math.abs(nums[i])-1;
if(nums[index]<0){ result.add(Math.abs(nums[i])); }
else{ nums[index] = -nums[index];}

}
return result;
}

取值范围内每个数都对应着数组中的一个位置,遍历数组,如果出现某个数,则将其对应位置的上的数取反,此后若遇到对应位置的数是负数时,则说明此数已出现过。
取反这一操作,既保留了原来的数值,又进行了有效的标记,学习了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: