Heap Greedy

1 239 Sliding Window Maximun 双端队列

    public int[] maxSlidingWindow(int[] nums, int k) {
        if (nums == null || k <= 0) return new int[0];
        int n = nums.length;
        int[] r = new int[n - k + 1];
        int ri = 0;
        Deque<Integer> q = new ArrayDeque<>();
        for (int i = 0; i < nums.length; i++)
        {
            while (!q.isEmpty() && q.peek() < i - k + 1){
                q.poll();
            }
            while (!q.isEmpty() && nums[q.peekLast()] < nums[i])
            {
                q.pollLast();
            }
            q.offer(i);
            if (i >= k - 1)
            {
                r[ri++] = nums[q.peek()];
            }
        }
        return r;
    }
View Code

2 134 Gas Station  比较用的和有的,两个结论

    public int canCompleteCircuit(int[] gas, int[] cost) {
         if(gas==null || gas.length==0 || cost==null || cost.length==0 || gas.length!=cost.length)  
             return -1;  
        int total = 0, sum = 0, point = -1;
        for (int i = 0; i < gas.length; i++)
        {
            int diff = gas[i] - cost[i];
            total += diff; sum += diff;
            if (sum < 0){
                sum = 0; point = i;
            }
        }
        return total >= 0 ? point + 1: -1;
    }
View Code

3 135 Candy

    public int candy(int[] ratings) {
        int[] candys = new int[ratings.length];
        Arrays.fill(candys, 1);
        for (int i = 1; i < ratings.length; i++)
        {
            if (ratings[i] > ratings[i-1])
                candys[i] = candys[i - 1] + 1;
        }
        for (int i = ratings.length - 2; i >= 0; i--)
        {
            if (ratings[i] > ratings[i+1])
                candys[i] = Math.max(candys[i], candys[i + 1] + 1);
        }
        int res = 0;
        for(int i : candys)
        {
            res += i;
        }
        return res;
    }
View Code

 

posted on 2017-05-14 10:03  wheleetcode  阅读(98)  评论(0编辑  收藏  举报