[Swift]LeetCode330. 按要求补齐数组 | Patching Array

Given a sorted positive integer array nums and an integer n, add/patch elements to the array such that any number in range [1, n] inclusive can be formed by the sum of some elements in the array. Return the minimum number of patches required.

Example 1:

Input: nums = [1,3], n = 6
Output: 1
Explanation:
Combinations of nums are [1], [3], [1,3], which form possible sums of: 1, 3, 4.
Now if we add/patch 2 to nums, the combinations are: [1], [2], [3], [1,3], [2,3], [1,2,3].
Possible sums are 1, 2, 3, 4, 5, 6, which now covers the range [1, 6].
So we only need 1 patch.

Example 2:

Input: nums = [1,5,10], n = 20
Output: 2
Explanation: The two patches can be [2, 4].

Example 3:

Input: nums = [1,2,2], n = 5
Output: 0


给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。

示例 1:

输入: nums = [1,3], n = 6
输出: 1
解释:
根据 nums 里现有的组合 [1], [3], [1,3],可以得出 1, 3, 4。
现在如果我们将 2 添加到 nums 中, 组合变为: [1], [2], [3], [1,3], [2,3], [1,2,3]。
其和可以表示数字 1, 2, 3, 4, 5, 6,能够覆盖 [1, 6] 区间里所有的数。
所以我们最少需要添加一个数字。

示例 2:

输入: nums = [1,5,10], n = 20
输出: 2
解释: 我们需要添加 [2, 4]

示例 3:

输入: nums = [1,2,2], n = 5
输出: 0

52ms
 1 class Solution {
 2     func minPatches(_ nums: [Int], _ n: Int) -> Int {
 3
 4         var miss = 1
 5         var res = 0
 6         var i = 0
 7         let l = nums.count
 8         while miss <= n {
 9             if i < l && nums[i] <= miss {
10                 miss += nums[i]
11                 i+=1
12             }else {
13                 miss <<= 1
14                 res += 1
15             }
16         }
17         return res
18     }
19 }

原文地址:https://www.cnblogs.com/strengthen/p/10260867.html

时间: 2024-08-28 03:34:03

[Swift]LeetCode330. 按要求补齐数组 | Patching Array的相关文章

[Swift Weekly Contest 108]LeetCode932. 漂亮数组 | Beautiful Array

For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such that: For every i < j, there is no k with i < k < j such that A[k] * 2 = A[i] + A[j]. Given N, return any beautiful array A.  (It is guaranteed th

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

内存补齐序列一:关于内存对齐和填充

这个问题困扰许久,查了许多资料,网上众说纷纭,整理如下: 对于内存补齐的详细情况,请关注下一篇:C/C++ 内存补齐机制 一.内存对齐的初步讲解 内存对齐可以用一句话来概括: "数据项只能存储在地址是数据项大小的整数倍的内存位置上(分别为偶地址.被4整除的地址.被8整除的地址 )" 例如int类型占用4个字节,地址只能在0,4,8等位置上. 例1: #include <stdio.h> struct xx{ char b; int a; int c; char d; };

谈谈关于内存对齐与补齐

首先我们先看看下面的C语言的结构体: [cpp] view plaincopy typedef struct MemAlign { int a; char b[3]; int c; }MemAlign; 以上这个结构体占用内存多少空间呢?也许你会说,这个简单,计算每个类型的大小,将它们相加就行了,以32为平台为例,int类型占4字节,char占用1字节,所以:4 + 3 + 4 = 11,那么这个结构体一共占用11字节空间.好吧,那么我们就用实践来证明是否正确,我们用sizeof运算符来求出这个

Elasticsearch in java 范例:自动补齐功能(completion suggester)

ES(elasticsearch)的suggester共有四类(term suggester, phrase suggester, completion suggester, context suggester), 其中completion suggester作为搜索框中的自动补齐功能,尤为常用. 本文将用java语言实现一个简单例子来叙述如何使用completion suggester. 例子的主要功能是为股票的名称和编号建立自动补齐功能. 实现一个完整的completion suggeste

自动补齐字符串的长度

在工作中学习 C#: string fullstr= hh.ToString("00000000");  或 string fullstr= hh.ToString().PadLeft(长度, '0'); sqlserver:  left(replicate('0',8-Len(参数))+ lTrim(参数),8) 注:'0'为补齐时使用的字符,8为补齐之后的长度,‘8-Len(参数)’为打印字符的次数) 在数据库中,用户的户号为“00005555”,用户在输入查询条件的时候,不输入前

小技巧--tab键自动补齐Git命令

Git是什么,你不清楚? 好吧,那么该篇内容对你也木有帮助,请绕道而行.. 我们在使用Git命令时,可以通过tab键,自动补齐Git,特别是在切换分支时特别有用. 如下,当我们想将当前分支切换到bugfix/DEV-31999-review-dialog-dose-not-show-scroll时,再此之前,要么傻兮兮的敲打分支名,要么复制粘贴: 但是,倘若我们可以通过tab键自动填充目的分支,岂不完美,如下: 下面就是关于设置mac下Tab键对git命令起作用的方法: Install Bash

python交互模式设置及VIM的tab补齐

本文出自http://wushank.blog.51cto.com/3489095/1612042 一.python交互模式设置 Python 解释器具有简单的行编辑功能. 在 Unix 系统上,任何 Python 解释器都可能已经添加了 GNU readline 库支持,这样就具备了精巧的交互编辑和历史记录等功能. 在 Python 主窗口中输入 Control-P 可能是检查是否支持命令行编辑的最简单的方法. 如果发出嘟嘟声(计算机扬声器),则说明你可以使用命令行编辑功能: 如果没有任何声音

字符串补齐

左补齐0,补齐2位:就为了好看: 1 string.Format("{0,-1:D2}",i + 1)