Solution#1
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List list = new ArrayList<Integer>();
if (nums == null || nums.length == 0) return list;
for (int i = 0; i < nums.length; i++) {
while (nums[i] != i + 1 && nums[nums[i] - 1] != nums[i]) {
int tmp = nums[i];
nums[i] = nums[tmp - 1];
nums[tmp - 1] = tmp;
}
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] != i + 1) {
list.add(i + 1);
}
}
return list;
}
}
Solution#1
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> list = new ArrayList<>();
if (nums == null || nums.length == 0) return list;
Arrays.sort(nums);
for (int i = 1; i < nums[0]; i++) {
list.add(i);
}
for (int i = 0; i < nums.length - 1; i++) {
while (nums[i] < nums[i + 1] - 1) {
list.add(++nums[i]);
}
}
for (int i = nums[nums.length - 1] + 1; i <= nums.length; i++) {
list.add(i);
}
return list;
}
}
Problem#1
- 时间复杂度太高。。。
1 <= nums[i] <= n
应当联想到数组下标- 利用数组下标求负数还是不够快
- 利用特殊的排序,速度比上面的稍快