Leetcode - Patching Array

weixin_34290000發表於2016-10-09

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

相關文章