
由于 nums的数字范围均在[1,n]中,我们可以利用这一范围之外的数字,来表达「是否存在」的含义。

具体来说,遍历 nums,每遇到一个数 x,就让 nums[r -1] 增加 n。由于 nums 中所有数均在[1,n]中,增加以后,这些数必然大于n。最后我们遍历nums,若nums[i]未大于n,就说明没有遇到过数 i+1。这样我们就找到了缺失的数字。
package com.dreams.February;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author PoemsAndDreams
* @date 2024-02-05 19:45
* @description //TODO day5
*/
public class day5_2 {
public static void main(String[] args) {
int[] arry = {1,4,1,1,1};
List<Integer> list = findDisappearedNumbers(arry);
System.out.println(list.toString());
}
public static List<Integer> findDisappearedNumbers(int[] nums) {
int n = nums.length;
int x = 0;
for (int num : nums) {
x = (num - 1) % n;
nums[x] += n;
}
ArrayList<Integer> integers = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i] <= n){
integers.add(i + 1);
}
}
return integers;
}
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/solutions/601946/zhao-dao-suo-you-shu-zu-zhong-xiao-shi-d-mabl/
来源:力扣(LeetCode)


