3731. 找出缺失的元素(2026.08.04)

给你一个整数数组 nums ,数组由若干 互不相同 的整数组成。

数组 nums 原本包含了某个范围内的 所有整数 。但现在,其中可能 缺失 部分整数。

该范围内的 最小 整数和 最大 整数仍然存在于 nums 中。

返回一个 有序 列表,包含该范围内缺失的所有整数,并 按从小到大排序 。如果没有缺失的整数,返回一个 空 列表。

示例 1:

输入: nums = 1,4,2,5

输出: 3

解释:

最小整数为 1,最大整数为 5,因此完整的范围应为 1,2,3,4,5。其中只有 3 缺失。

示例 2:

输入: nums = 7,8,6,9

输出: \[\]

解释:

最小整数为 6,最大整数为 9,因此完整的范围为 6,7,8,9。所有整数均已存在,因此没有缺失的整数。

示例 3:

输入: nums = 5,1

输出: 2,3,4

解释:

最小整数为 1,最大整数为 5,因此完整的范围应为 1,2,3,4,5。缺失的整数为 2、3 和 4。

提示:

  • 2 <= nums.length <= 100
  • 1 <= nums[i] <= 100

苯人思路

将排好序的 nums 和范围内所有整数构成的数组 mid 元素一一比较

若访问到 nums 的元素和 mid 的元素不一致(即 nums 缺失该元素),则把该元素加入到 answer 数组中

cpp 复制代码
class Solution {
public:
    vector<int> findMissingElements(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        int min = nums[0];
        int max = nums[n-1];
        int offset = max-min+1;

        if(n==offset) return {};
        vector<int> mid(offset);
        iota(mid.begin(), mid.begin()+offset, min);
        
        vector<int> answer;
        int i=0, j=0;
        while(j<offset){
            if(nums[i]!=mid[j]){
                answer.emplace_back(mid[j]);
                j++;
            }
            else{
                i++;
                j++;
            }
        }

        return answer;
    }
};
相关推荐
Rnan-prince18 分钟前
LeetCode 股票买卖系列:一个动态规划状态机模板通吃四题
leetcode·动态规划
如意猴23 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i26 分钟前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
汉克老师32 分钟前
GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
c++·gesp·小学生·学c++编程
圣保罗的大教堂1 小时前
leetcode 3756. 连接非零数字并乘以其数字和 II 中等
leetcode
沫璃染墨1 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu1 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
知识分享小能手2 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
无忧.芙桃2 小时前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
ShineWinsu2 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset