Leetcode - Patching Array

My code:

public class Solution {
    public int minPatches(int[] nums, int n) {
        long max = 0;
        int c = 0;
        for (int i = 0; max < n;) {
            if (i >= nums.length || max < nums[i] - 1) {
                max += max + 1;
                c++;
            }
            else {
                max += nums[i];
                i++;
            }
        }
        
        return c;
    }
}

reference:
https://discuss.leetcode.com/topic/35517/share-my-greedy-solution-by-java-with-simple-explanation-time-1-ms

我觉得这个思想还是很巧妙的。
max 表示的是当前数字下,我能构成的最大数字,并且最小数字和最大数字之间是连续的。
如果 max < nums[i] - 1,
这表示 (max, nums[i]) 这段区域,有些数字我不能表示,就直接跳到了 nums[i]
这里,我就需要 patch 了
但是,我patch的时候,也得注意,用最少的patch,把(preMax, currMax) 连续得连接起来。

那么,我得patch (max + 1) 这个数。
这样的话, [max, max + max + 1] 这段区域内,所有的数字,我都可以表示
然后我一次次得累加,直到 max >= nums[i] - 1
同理, max >= n

Anyway, Good luck, Richardo! -- 10/08/2016

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 1. Two Sum 用hash可以得到O(n)时间的解法,用python中的enumerate函数,可以获得元素...
    Morphiaaa阅读 450评论 0 0
  • 1/4 虽然这本书也许应该归在企业管理类,它主要针对企业管理者,但我们也可以把这个法则用来时间管理。 一直以来知道...
    Hungry2Foolish阅读 2,331评论 0 3
  • 有人说,你的气质里藏着你读过的书,走过的路,爱过的人。 所谓桂林山水甲天下,并非只是溢美之辞。飘摇在漓江上,欣赏着...
    孤独的人晚回家阅读 251评论 0 5