330. Patching Array | Java最短代码实现
2016-03-15 20:45
501 查看
原题链接:330. Patching Array
【思路】
这是贪心算法的一个应用。举个例子,对于数组 [1, 2, 3, 8] :
1. 用一个miss来表示当前缺失的数,初始时为1,num[0] = 1,它的覆盖范围为 [1, 1] ,可以补足miss = 1
2.那么哪个数是num[0]达不到的呢?答案是:miss + nums[0] = 2。那么向数组申请一个新的数nums[1],它们的覆盖范围为 [1, 3] 发现可以补足miss = 2。
3.那么哪个数是它们两达不到的呢?答案是:miss + nums[1] = 4。那么向数组申请一个新的数nums[2],它们的覆盖范围为 [1, 6] 发现3可以补足miss = 4
4.那么哪个数是它们三达不到的呢?答案是:miss + nums[2] = 7。那么向数组申请一个新的数nums[3],发现由于8大于7,因此miss要自己申请一个7,此时由于7的加入,覆盖范围变为了 [1, 13]
5.那么下一个 [1, 2, 3, 7]达不到的呢?答案是:miss + miss(补丁7) = 14。由于8 < 14因此可以覆盖到14,且它们的覆盖范围变为[1, 21]
依此思维类推:
cases passed. Runtime: 1
ms Your runtime beats 15.00% of javasubmissions.
欢迎优化!
【思路】
这是贪心算法的一个应用。举个例子,对于数组 [1, 2, 3, 8] :
1. 用一个miss来表示当前缺失的数,初始时为1,num[0] = 1,它的覆盖范围为 [1, 1] ,可以补足miss = 1
2.那么哪个数是num[0]达不到的呢?答案是:miss + nums[0] = 2。那么向数组申请一个新的数nums[1],它们的覆盖范围为 [1, 3] 发现可以补足miss = 2。
3.那么哪个数是它们两达不到的呢?答案是:miss + nums[1] = 4。那么向数组申请一个新的数nums[2],它们的覆盖范围为 [1, 6] 发现3可以补足miss = 4
4.那么哪个数是它们三达不到的呢?答案是:miss + nums[2] = 7。那么向数组申请一个新的数nums[3],发现由于8大于7,因此miss要自己申请一个7,此时由于7的加入,覆盖范围变为了 [1, 13]
5.那么下一个 [1, 2, 3, 7]达不到的呢?答案是:miss + miss(补丁7) = 14。由于8 < 14因此可以覆盖到14,且它们的覆盖范围变为[1, 21]
依此思维类推:
public int minPatches(int[] nums, int n) { int patchCount = 0; int index = 0; long miss = 1; while (miss <= n) { if (index < nums.length && nums[index] <= miss) { miss += nums[index++]; } else { miss += miss; patchCount++; } } return patchCount; }149 / 149 test
cases passed. Runtime: 1
ms Your runtime beats 15.00% of javasubmissions.
欢迎优化!
相关文章推荐
- java super和this 的区别
- Windows 10下JDK与Studio的安装和环境变量配置
- Spring简介
- MyEclipse 配置Android环境
- eclipse搭建springMVC项目
- 按要求输出图形
- Android Eclipse 里面依赖自己的工程无法关联源码解决方案
- spring学习的java基础--Java反射
- Java代码分析器(一): JDT入门
- java中面向接口编程的好处
- Java反射系列之——什么是反射?
- Java - 推断元音辅音
- Leetcode:203. Remove Linked List Elements(Java)
- java中泛型
- spring事务控制的方法中抛出异常不回滚
- java中标签库.tld文件的书写格式
- java中的Date日期格式转换之二
- java设计模式之代理模式 (静态&动态)
- Selenium初体验(基于Java)
- Leetcode:290. Word Pattern(JAVA)