力扣448题:找到所有数组中消失的数字
2026/6/4 20:46:44 网站建设 项目流程

题目:给你一个含n个整数的数组nums,其中nums[i]在区间[1, n]内。请你找出所有在[1, n]范围内但没有出现在nums中的数字,并以数组的形式返回结果。

对于题目的理解,容易错的地方是nums数组里面是有n个数的,n个数是存在重复的几个,我们是要找到其中存在的那些数

采取的方法,我是从数组的索引来开始;数组的索引是从0到n-1的,所以与从1到n来会差1的;通过给数组的值取绝对值(避免索引为负的情况)再减以,就是与索引开始一一对应的。然后我把所有nums[index]>0的情况下,标记为负,(因为数组中有的数字是会重复的,所以可以通过这个来找到未出现的数字);后面还有第二个循环,其是要找到nums[i]>0的就是消失的那个数字,返回i+1。

代码:

class Solution {

public List<Integer> findDisappearedNumbers(int[] nums) {

// 第一遍:标记出现过的数字(索引 = 数字-1)

for (int i = 0; i < nums.length; i++) {

int index = Math.abs(nums[i]) - 1; // 取绝对值避免重复标记影响 减1是为了回到数组索引

if (nums[index] > 0) {

nums[index] = -nums[index]; // 标记为负

}

}

// 第二遍:收集未被标记的位置(即消失的数字)

List<Integer> result = new ArrayList<>();

for (int i = 0; i < nums.length; i++) {

if (nums[i] > 0) {

result.add(i + 1);

}

}

return result;

}

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询