思路:
因为 是 1~n 之间所以 n不会大于 nums.length+1 所以 我们可以遍历数组让 nums[nums[i]]-1 去加一个数字 n 再用 nums[num[i]]-1 % n 取出 原坐标 因为 在循环中会改变数组 所以要取 %n
代码:
public class FindArrayNoHas {
public static void main(String[] args) {
int[] nums=new int[]{4,3,2,7,8,2,3,1};
findDisappearedNumbers(nums);
}
public static ArrayList<Integer> findDisappearedNumbers(int[] nums) {
int n=nums.length+100;
for (int i = 0; i < nums.length; i++) {
int x=(nums[i]-1)%n;
nums[x]=nums[x]+n;
}
ArrayList<Integer> integers = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if(nums[i]<n){
integers.add(i+1);
}
}
System.out.println(integers);
return integers;
}
}