leetcode 41

这题有点儿烧脑了,就是没有出现的最小的正数一定是 1 到 n + 1 这个范围的,为啥呢,因为总共是 n 个元素,我们考虑最极端的情况,全是正整数,那么 1 到 n 没有缺失,那最小的正整数就是 n + 1 了,如果有负数,那么负数肯定就不算了,比如说 -1 1 2 ,n == 3, 预期的结果是 3 ,在 1 到 4 这个范围内,所以还是比较秀的。这个结论,就是这个题的关键部分。然后我们可以考虑,一个比较大的数字,比如说,2147483647 是最大的正整数,那么不影响结论呀,我们输出缺失的最小的正整数,直接输出 1 就完事了。这个困难题绝对的纸老虎。

cpp 复制代码
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for ( int i = 0; i < n; i++ ) {
            while ( nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1] ) {
                swap( nums[i], nums[nums[i] - 1] );
            }
        }
        for ( int i = 0; i < n; i++ ) {
            if ( nums[i] != i + 1 ) {
                return i + 1;
            }
        }
        return n + 1;
    }
};
相关推荐
txzrxz10 分钟前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
xqqxqxxq13 分钟前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
闪电悠米37 分钟前
力扣hot100-54.螺旋矩阵-模拟边界控制详解
算法·leetcode·矩阵
变量未定义~1 小时前
虚拟节点-星石传送阵(4星)、强连通分量
数据结构·算法
IT方大同1 小时前
C语言分支与循环语句
c语言·开发语言·算法
待磨的钝刨2 小时前
深入理解主成分分析(PCA)
人工智能·线性代数·算法·机器学习
电子云与长程纠缠2 小时前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
来一碗刘肉面2 小时前
串的定义与基本操作
数据结构
geovindu3 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
三克的油3 小时前
数据结构-1
数据结构