448. Find All Numbers Disappeared in an Array
题目描述和难度
- 题目描述:
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
示例:
输入: [4,3,2,7,8,2,3,1] 输出: [5,6]
- 题目难度:简单。
- 英文网址:448. Find All Numbers Disappeared in an Array 。
- 中文网址:448. 找到所有数组中消失的数字 。
思路分析
求解关键:
参考解答
参考解答1
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> res = new ArrayList<>();
int len = nums.length;
if (len == 0) {
return res;
}
// 4 3 2 1 6 8 7 6
for (int i = 0; i < len; i++) {
while (nums[i] <= len && nums[nums[i] - 1] != nums[i]) {
swap(nums, nums[i] - 1, i);
}
}
// System.out.println(Arrays.toString(nums));
// 1 2 3 4
for (int i = 0; i < len; i++) {
if (nums[i] - 1 != i) {
res.add(i + 1);
}
}
return res;
}
private void swap(int[] nums, int index1, int index2) {
if (index1 == index2) {
return;
}
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
public static void main(String[] args) {
int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
Solution solution = new Solution();
List<Integer> disappearedNumbers = solution.findDisappearedNumbers(nums);
System.out.println(disappearedNumbers);
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0448-find-all-numbers-disappeared-in-an-array ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。