这道题我的解法比较单一,采用hash数组的方法,discuss高票的方法采用标记负数的方法,对出现数对应的位置则表记为负数。
我的答案
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int length = nums.length;
int[] hash = new int[length];
List<Integer> result = new ArrayList<Integer>();
for(int i = 0; i < length;i++){
hash[nums[i] - 1]++;
}
for(int i = 0; i < length;i++){
if(hash[i] == 0){
result.add(i + 1);
}
}
return result;
}
}
高票答案
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> ret = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
int val = Math.abs(nums[i]) - 1;
if(nums[val] > 0) {
nums[val] = -nums[val];
}
}
for(int i = 0; i < nums.length; i++) {
if(nums[i] > 0) {
ret.add(i+1);
}
}
return ret;
}
2016/12/20