您的位置:首页 > 汽车 > 新车 > 1688采购网官网_北京海淀区公司_怎么做网站排名_品牌营销策划怎么写

1688采购网官网_北京海淀区公司_怎么做网站排名_品牌营销策划怎么写

2025/2/24 9:40:45 来源:https://blog.csdn.net/weixin_43305485/article/details/145062024  浏览:    关键词:1688采购网官网_北京海淀区公司_怎么做网站排名_品牌营销策划怎么写
1688采购网官网_北京海淀区公司_怎么做网站排名_品牌营销策划怎么写

题目描述

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

示例1

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]

示例2

输入:nums = [1,1]
输出:[2]

解题思路 (时间复杂度O(n))

#include <stdlib.h>int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {int* appeared = (int*)calloc(numsSize, sizeof(int)); // 初始化标记数组:appeared数组用于标记1到n之间的数字是否在nums中出现。数组初始化为0,表示所有数字初始时都未出现。int* ret = (int*)malloc(numsSize * sizeof(int));int retIndex = 0; for (int i = 0; i < numsSize; i++) {if (nums[i] > 0 && nums[i] <= numsSize) { // 标记出现的数字:遍历nums数组,对于每个数字nums[i],如果它在1到n之间,则将appeared[nums[i] - 1]标记为1。这里减1是因为数组索引从0开始。appeared[nums[i] - 1] = 1; }}for (int i = 0; i < numsSize; i++) { // 找到未出现的数字:再次遍历appeared数组,对于每个未标记的数字(即appeared[i] == 0),将i + 1(因为数字从1开始)添加到返回数组ret中。if (appeared[i] == 0) {ret[retIndex++] = i + 1; }}*returnSize = retIndex; // 设置返回数组的大小:returnSize指向返回数组的大小,即retIndex。free(appeared); // 释放标记数组:释放appeared数组,避免内存泄漏。return ret; 
}

执行结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com