您的位置:首页 > 编程语言 > Java开发

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]

依此思维类推:

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.

欢迎优化!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: