- 魔法师2026-08-1113093
力扣 LeetCode

2996. 大于等于顺序前缀和的最小缺失整数 - 力扣(LeetCode)
2996. 大于等于顺序前缀和的最小缺失整数 - 给你一个下标从 0 开始的整数数组 nums 。
如果一个前缀 nums[0..i] 满足对于 1 <= j <= i 的所有元素都有 nums[j] = nums[j - 1] + 1 ,那么我们称这个前缀是一个 顺序前缀 。特殊情况是,只包含 nums[0] 的前缀也是一个 顺序前缀 。
请你返回 nums 中没有出现过的 最小 整数 x ,满足 x 大于等于 最长 顺序前缀的和。
示例 1:
输入:nums =...
思路
按题目模拟即可。
代码```
class Solution {
public int missingInteger(int[] nums) {
int n = nums.length;
int sum = nums[0];
int idx = 1;
for (; idx < n; idx++) {
if (nums[idx] != nums[idx - 1] + 1) {
break;
}
sum += nums[idx];
}
if (sum > 50) {
return sum;
}
Arrays.sort(nums);
for (--idx; idx < n; idx++) {
if (nums[idx] == sum) {
sum++;
}
if (nums[idx] > sum) {
return sum;
}
}
return sum;
}
}看耗时,4ms 19.05%。最快算法1ms,是什么算法这么快呢?是朴素的**把和每次循环一遍**。所以如果数据量小就别想多了 ^-^主楼 - SomeBottle2026-08-1111179
模拟 + 哈希表。看清楚题,注意是找的前缀。咱最开始做成找符合要求的连续子序列了…```
class Solution {
public:
int missingInteger(vector<int>& nums) {
// 先找到最长顺序前缀并求和
// 看清楚题了,说的是前缀而不是连续子序列
int sqSum=nums[0];
bool confirmed=false;
bool ap[51]; // 标记每个数字是否出现过
memset(ap,0,51);
ap[nums[0]]=true;
for(int i=1;i<nums.size();i++){
ap[nums[i]]=true;
if(!confirmed&&nums[i]-nums[i-1]==1){
// 是顺序的
sqSum+=nums[i];
}else{
confirmed=true;
}
}
while(sqSum<=50&&ap[sqSum]){
sqSum++;
}
return sqSum;
}
}; - Infinity4B2026-08-1121802
算术评级 3 第 121 场双周赛 Q1 难度分 1406
纯弱智题来的```
class Solution:
def missingInteger(self, nums: List[int]) -> int:
n=len(nums)
cur_row=1
cur_sum=nums[0]
for i in range(1,n):
if i and nums[i]==nums[i-1]+1:
cur_row+=1
cur_sum+=nums[i]
else:
break
nums_set = set(nums)
while cur_sum in nums_set:
cur_sum+=1
return cur_sum - doge2026-08-1128633
大力出奇迹```
class Solution:
def missingInteger(self, nums: List[int]) -> int:
n = len(nums)
tot = nums[0]
for i in range(1, n):
if nums[i] == nums[i - 1] + 1:
tot += nums[i]
else:
breakcnt = Counter(nums)
ans = tot
while ans in cnt:
ans += 1
return ans - Lvvvv2026-08-1117266
丑陋了```
class Solution {
public:
int missingInteger(vector<int>& nums) {
int sum = nums[0];
int n = nums.size();
const int N = 50;
vector<int> st(N + 1,false);
st[nums[0]] = true;
for(int i = 1; i < n; i++) {
if(nums[i] == nums[i - 1] + 1) {
sum += nums[i];
st[nums[i]] = true;
} else {
while(i < n) {
st[nums[i]] = true;
i++;
}
while(sum <= N) {
if(st[sum]) {
sum++;
} else {
break;
}
}
return sum;
}
}
if(n == 1) {
return nums[0] + 1;
} else {
return sum;
}}
}; - CPython2026-08-1114995
class Solution: def missingInteger(self, nums: List[int]) -> int: st = set(nums) n = len(nums) pre = cur = nums[0] for i in range(1, n): if nums[i] - 1 == pre: cur += nums[i] pre = nums[i] else: break while cur in st: cur += 1 return cur - attention11112026-08-118421
简单题```
class Solution:
def missingInteger(self, nums: List[int]) -> int:
pre=nums[0]-1
nums_sum=0
find=set(nums)
for i in range(0,len(nums)):
if nums[i]==pre+1:
nums_sum+=nums[i]
pre=nums[i]
else: break
while(nums_sum in find):
nums_sum+=1
return nums_sum