zoukankan      html  css  js  c++  java
  • 188. Best Time to Buy and Sell Stock IV

    package LeetCode_188
    
    /**
     * 188. Best Time to Buy and Sell Stock IV
     * https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/description/
     *
     * Say you have an array for which the i-th element is the price of a given stock on day i.
    Design an algorithm to find the maximum profit. You may complete at most k transactions.
    Note:
    You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
    
    Example 1:
    Input: [2,4,1], k = 2
    Output: 2
    Explanation: Buy on day 1 (price = 2) and sell on day 2 (price = 4), profit = 4-2 = 2.
    
    Example 2:
    Input: [3,2,6,5,0,3], k = 2
    Output: 7
    Explanation: Buy on day 2 (price = 2) and sell on day 3 (price = 6), profit = 6-2 = 4.
    Then buy on day 5 (price = 0) and sell on day 6 (price = 3), profit = 3-0 = 3.
     * */
    class Solution {
        /*
        * Time complexity:O(nk), Space complexity:O(k)
        * */
        fun maxProfit(k: Int, prices: IntArray): Int {
            val n = prices.size
            if (n <= 1 || k <= 0) {
                return 0
            }
    
            var profit = 0
            //check the k, if large than n, will be Memory Limit Exceeded
            //so do below like Leetcode_122
            if (k > n / 2) {
                for (i in 0 until prices.size - 1) {
                    if (prices[i + 1] > prices[i]) {
                        profit += prices[i + 1] - prices[i]
                    }
                }
                return profit
            }
    
            val buys = IntArray(k, { Int.MIN_VALUE })
            val sells = IntArray(k)
            for (i in prices.indices) {
                for (j in 0 until k) {
                    val price = if (j == 0) -prices[i] else (sells[j - 1] - prices[i])
                    buys[j] = Math.max(buys[j], price)
                    sells[j] = Math.max(sells[j], buys[j] + prices[i])
                }
            }
            return sells[k - 1]
        }
    }
  • 相关阅读:
    关于在windows平台下将应用制作成windows服务及服务依赖的感想
    mysql 变量赋值的三种方法
    如何上传本地jar至远程仓库供其他项目使用
    maven的标准
    修改idea的缓存
    前端的网站
    读取简单的xml
    IDEA 自动设置compile target变成1.5
    注解导出优化版(推荐,十分强大)
    Linux命令干货!!!最常用的命令
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13342244.html
Copyright © 2011-2022 走看看