• 魔法师

    力扣 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,是什么算法这么快呢?是朴素的**把和每次循环一遍**。所以如果数据量小就别想多了 ^-^
    主楼
  • SomeBottle

    模拟 + 哈希表。看清楚题,注意是找的前缀。咱最开始做成找符合要求的连续子序列了…```
    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;
    }
    };

    #1
  • Infinity4B

    算术评级 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

    #2
  • doge

    大力出奇迹```
    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:
    break

    cnt = Counter(nums)
    ans = tot
    while ans in cnt:
    ans += 1
    return ans

    #3
  • Lvvvv

    丑陋了```
    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;
    }

    }
    };

    #4
  • CPython
    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
    #5
  • attention1111

    简单题```
    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

    #6

发表回复

登录后回复