330. Patching Array
2016-07-11 22:45
411 查看
Given a sorted positive integer array nums and an integer n, add/patch elements to the array such that any number in range
Example 1:
nums =
Return
Combinations of nums are
possible sums of:
Now if we add/patch
Possible sums are
So we only need
Example 2:
nums =
Return
The two patches can be
Example 3:
nums =
Return
摘自
https://discuss.leetcode.com/topic/35494/solution-explanation
Explanation
Let
we might be missing. Meaning we already know we can build all sums in
Then if we have a number
those smaller sums to build all sums in
must add such a number to the array, and it's best to add
maximize the reach.
Example: Let's say the input is
Using the given numbers 1, 2 and 4, we can already build all sums from 0 to 7, i.e., the range [0,8). But we can't build the sum 8, and the next given number (13) is too large. So we insert 8 into the array. Then we can build all sums in [0,16).
Do we need to insert 16 into the array? No! We can already build the sum 3, and adding the given 13 gives us sum 16. We can also add the 13 to the other sums, extending our range to [0,29).
And so on. The given 43 is too large to help with sum 29, so we must insert 29 into our array. This extends our range to [0,58). But then the 43 becomes useful and expands our range to [0,101). At which point we're done.
public int minPatches(int[] nums, int n)
{
long miss = 1;
int i = 0, added = 0;
while (miss <= n)
{
if (i < nums.length && nums[i] <= miss)
{
miss += nums[i++];
} else
{
miss += miss;
added++;
}
}
return added;
}
[1, n]inclusive can be formed by the sum of some elements in the array. Return the minimum number of patches required.
Example 1:
nums =
[1, 3], n =
6
Return
1.
Combinations of nums are
[1], [3], [1,3], which form
possible sums of:
1, 3, 4.
Now if we add/patch
2to 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
1patch.
Example 2:
nums =
[1, 5, 10], n =
20
Return
2.
The two patches can be
[2, 4].
Example 3:
nums =
[1, 2, 2], n =
5
Return
0.
摘自
https://discuss.leetcode.com/topic/35494/solution-explanation
Explanation
Let
missbe the smallest sum in
[0,n]that
we might be missing. Meaning we already know we can build all sums in
[0,miss).
Then if we have a number
num <= missin the given array, we can add it to
those smaller sums to build all sums in
[0,miss+num). If we don't, then we
must add such a number to the array, and it's best to add
missitself, to
maximize the reach.
Example: Let's say the input is
nums = [1, 2, 4, 13, 43]and
n = 100. We need to ensure that all sums in the range [1,100] are possible.
Using the given numbers 1, 2 and 4, we can already build all sums from 0 to 7, i.e., the range [0,8). But we can't build the sum 8, and the next given number (13) is too large. So we insert 8 into the array. Then we can build all sums in [0,16).
Do we need to insert 16 into the array? No! We can already build the sum 3, and adding the given 13 gives us sum 16. We can also add the 13 to the other sums, extending our range to [0,29).
And so on. The given 43 is too large to help with sum 29, so we must insert 29 into our array. This extends our range to [0,58). But then the 43 becomes useful and expands our range to [0,101). At which point we're done.
public int minPatches(int[] nums, int n)
{
long miss = 1;
int i = 0, added = 0;
while (miss <= n)
{
if (i < nums.length && nums[i] <= miss)
{
miss += nums[i++];
} else
{
miss += miss;
added++;
}
}
return added;
}
相关文章推荐
- java是一门有未来的语言!
- spring四种依赖注入方式 (set,构造器,工厂,注解 )
- [转]一款漂亮的表单输入框样式
- 苏州实习第二天记
- JavaScript高级
- C++11 智能指针之 std::shared_ptr 初级学习
- decode()函数
- ssh分发数据
- Fresco 初体验各种问题解决
- 继续加油~,用这一款工具帮助更多的Cocos3D团队。
- 计算广告——广告定向实践
- Ubuntu更新源
- 中山大学软件工程专业初级实训-会议议程管理Agenda
- 剑指offer 39题 【知识迁移能力】二叉树的深度
- 搭建动态网页的Tomcat服务器
- Python 模块的快速安装
- SpringMvc的入门案例
- 设计模式系列之抽象工厂模式
- 1.4 窗口部件的布局
- GO的GDB调试