330. 按要求补齐数组

简介: 330. 按要求补齐数组

@TOC


前言

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/patching-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

先给数组排序
range代表已经凑出来的数
如果range+1<arr[i],证明还缺数
那么我们只需在range的基础上加一个range+1,直到凑出arr[i]

如果已经凑出arr[i],则在range上加上arr[i]

如果已经遍历完arr,还没有凑出aim,
则不断在range的基础上加range+1,直到凑出aim

代码

class Solution {
    public int minPatches(int[] arr, int aim) {
        int ans=0;
        long range=0;
        Arrays.sort(arr);
        for(int i=0;i<arr.length;i++){
            //要求没被满足
            while(arr[i]-1>range){
                range+=range+1;
                ans++;
                if(range>=aim){
                    return ans;
                }
            }
            range+=arr[i];
            if(range>=aim){
                return ans;
            }
        }
        while(range+1<=aim){
            range+=range+1;
            ans++;
        }
        return ans;
    }
}
相关文章
|
6月前
|
算法 测试技术 C#
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
|
6月前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
6月前
|
算法 JavaScript 前端开发
贪心算法】按要求补齐数组
贪心算法】按要求补齐数组
20 0
|
6月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
35 0
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
顺序打印整型数字的每一位
顺序打印整型数字的每一位
49 0
|
存储 算法 JavaScript
寻找数组中的重复数字
寻找数组中的重复数字
寻找数组中的重复数字
|
测试技术
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
88 0
|
存储 算法 Python
python 力扣算法实现2 :#给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 # #最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
python 力扣算法实现2 :#给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 # #最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。