Leetcode 330. 按要求补齐数组
本文最后更新于240 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

给定一个已排序的正整数数组 nums ,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。

请返回 满足上述要求的最少需要补充的数字个数 。

1.2.题目地址

https://leetcode.cn/problems/patching-array/description/

2.解题方法

2.1.解题思路

贪心

2.2.解题步骤

第一步,构建维护变量。s维护当前遍历的区域中能够覆盖的范围[0,s-1];i维护nums的遍历指针;result维护结果变量。

第二步,遍历nums,在s<=n的情况下,即覆盖范围还没有达到[1,n]的情况下,进行更新维护变量。

  • 2.1.nums[i]<=s的情况,此时覆盖范围可以增加[nums[i],nums[i]+s-1]的覆盖区间,所以更新s进行覆盖区间扩展,并右移nums的指针(大于s时扩展会导致s不在覆盖区间中)

  • 2.2.nums[i]>s的情况,此时为了让s在覆盖区间中,可以贪心的添加s到数组中进行范围扩展;并更新s和结果变量

第三步,返回结果变量

3.解题代码

python代码

class Solution:
    def minPatches(self, nums: List[int], n: int) -> int:
        # 思路:贪心
        # 第一步,构建维护变量。s维护当前遍历的区域中能够覆盖的范围[0,s-1];i维护nums的遍历指针;result维护结果变量。
        result, s, i = 0, 1, 0
        # 第二步,遍历nums,在s<=n的情况下,即覆盖范围还没有达到[1,n]的情况下,进行更新维护变量。
        while s <= n:
            if i < len(nums) and nums[i] <= s:
                # 2.1.nums[i]<=s的情况,此时覆盖范围可以增加[nums[i],nums[i]+s-1]的覆盖区间,所以更新s进行覆盖区间扩展,并右移nums的指针(大于s时扩展会导致s不在覆盖区间中)
                s += nums[i]
                i += 1
            else:
                # 2.2.nums[i]>s的情况,此时为了让s在覆盖区间中,可以贪心的添加s到数组中进行范围扩展;并更新s和结果变量
                s += s
                result += 1
        # 第三步,返回结果变量
        return result

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇