问题描述
给定一个升序的整数数组和一个整数 n
,要求往数组中添加元素,使得 1~n
中的数字都能由数组中的一个或多个元素的总和构成,要求输出添加元素的最小个数。题目链接:点我
样例输入输出
输入:nums = [1,3], n = 6
输出:1
解释:添加2,数组构成:[1,2,3]。数字 1 由 [1] 构成,数字 2 由 [2] 构成,数字 3 由 [1,2] 构成,数字 4 由 [1,3] 构成,数字 5 由 [2,3] 构成,数字 6 由 [1,2,3] 构成
输入:nums = [1,5,10], n = 20
输出:2
解释:添加 2,4
问题解法
此题解法参考:https://leetcode.cn/problems/patching-array/solution/an-yao-qiu-bu-qi-shu-zu-by-leetcode-solu-klp1。主要做法是:由 1
开始构造连续区间直到 n
,构造过程中如果区间已经包含了数组的元素,则将数组下标往后移动,如果没有包含,则将区间扩大一倍。其依赖的原理如下:如果 1~m
是一个连续的区间,那由其中的数字进行组合可以得到 1~2m-1
的连续区间。因为在 1~m-1
的数字分别加上 m
就能得到 m+1~2m-1
的区间,结合前面的 1~m
就是 1~2m-1
。代码如下:
1 | class Solution { |
参考资料
https://leetcode.cn/problems/patching-array/solution/an-yao-qiu-bu-qi-shu-zu-by-leetcode-solu-klp1