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;
}
取值范围内每个数都对应着数组中的一个位置,遍历数组,如果出现某个数,则将其对应位置的上的数取反,此后若遇到对应位置的数是负数时,则说明此数已出现过。
取反这一操作,既保留了原来的数值,又进行了有效的标记,学习了
如何不利用其它空间,在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;
}
取值范围内每个数都对应着数组中的一个位置,遍历数组,如果出现某个数,则将其对应位置的上的数取反,此后若遇到对应位置的数是负数时,则说明此数已出现过。
取反这一操作,既保留了原来的数值,又进行了有效的标记,学习了
相关文章推荐
- leetcode442 Find All Duplicates in an Array
- [leetcode 442] Find All Duplicates in an Array
- LeetCode-442-Find All Duplicates in an Array-M
- [C语言][LeetCode][442]Find All Duplicates in an Array
- leetcode 442 Find All Duplicates in an Array C++
- [LeetCode]442 Find All Duplicates in an Array
- LeetCode 442 Find All Duplicates in an Array
- leetcode442 Find All Duplicates In An Array Java
- 【LeetCode-442】Find All Duplicates in an Array(C++)(
- Leetcode 442-Find All Duplicates in an Array
- LeetCode 442 --- Find All Duplicates in an Array
- LeetCode - 442 - Find All Duplicates in an Array
- [Leetcode] Find All Duplicates in an Array
- LeetCode: Find All Duplicates in an Array
- LeetCode-Find All Duplicates in an Array & Find All Numbers Disappeared in an Array
- leetcode之Find All Duplicates in an Array 问题
- Leetcode: Find All Duplicates in an Array
- LeetCode刷题【Array】 Find All Duplicates in an Array
- leetcode---442---FindAllDuplicatesinanArray
- LeetCode Find All Duplicates in an Array