题目:
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input: [4,3,2,7,8,2,3,1] Output: [5,6]解决方法一: Runtime: 30 ms
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> disappear = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
nums[(nums[i]-1)%nums.length]+=nums.length;
}
for(int i=0;i<nums.length;i++){
if(nums[i]<=nums.length) disappear.add(i+1);
}
return disappear;
}
}
参考:
本文介绍了一种高效查找数组中缺失元素的方法。该方法能够在O(n)的时间复杂度内完成任务,且不使用额外的空间。通过巧妙地修改输入数组本身来记录每个元素出现的状态,最终找出未出现的元素。
411

被折叠的 条评论
为什么被折叠?



