动态规划:力扣LCR 188. 买卖芯片的最佳时机

题目

数组 prices 记录了某芯片近期的交易价格,其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片,并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。

如果你不能获取任何利润,返回 0。

示例 1:

复制代码
输入:prices = [3, 6, 2, 9, 8, 5]
输出:7
解释:在第 3 天(芯片价格 = 2)买入,在第 4 天(芯片价格 = 9)卖出,最大利润 = 9 - 2 = 7。

示例 2:

复制代码
输入:prices = [8, 12, 15, 7, 3, 10]
输出:7
解释:在第 5 天(芯片价格 = 3)买入,在第 6 天(芯片价格 = 10)卖出,最大利润 = 10 - 3 = 7。

提示:

  • 0 <= prices.length <= 10^5
  • 0 <= prices[i] <= 10^4

暴力做法,遍历每一种可能,时间复杂度O(n2)

cpp 复制代码
int bestTiming(int* prices, int pricesSize) {
    if(pricesSize==0)return 0;
    int re=0;
    int k=0;
    int min =prices[0];
    for(int i=1;i<pricesSize;i++){
        min=min<prices[i]?min:prices[i];
        k=prices[i]-min;
        re=re>k?re:k; 
    }
    return re;
}

动规,每一次交易的利润可以看作当前交易利润和前一次交易利润的最大值,当前交易利润为当前价格和之前最低价格的差,即DPI=MAX(DPI-1, pricesi-mincost),DPpricesSize-1即为所求

cpp 复制代码
int bestTiming(int* prices, int pricesSize) {
    if(pricesSize==0)return 0;
    int k=0;
    int dp[pricesSize];
    int min =prices[0];
    dp[0]=0;
    for(int i=1;i<pricesSize;i++){
        min=min<prices[i]?min:prices[i];
        k=prices[i]-min;
        dp[i]=dp[i-1]>k?dp[i-1]:k; 
    }
    return dp[pricesSize-1];
}

时间复杂度O(n),遍历一次数组,空间复杂度O(n) ,保存结果需要等长数组

空间复杂度优化,可以看出计算当前dpi需要dpi-1、pricesi和mincost,所以只需要保存常数级别的变量即可

cpp 复制代码
int bestTiming(int* prices, int pricesSize) {
    if(pricesSize==0)return 0;
    int re=0;
    int k=0;
    int min =prices[0];
    for(int i=1;i<pricesSize;i++){
        min=min<prices[i]?min:prices[i];
        k=prices[i]-min;
        re=re>k?re:k; 
    }
    return re;
}

时间复杂度O(n),空间复杂度O(1)

相关推荐
一去不复返的通信er3 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
程序 代码狂人6 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade7 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
Xin7707 小时前
LeetCode 79. 单词搜索(DFS 回溯法)
leetcode
小郎君6589 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
邵奈一9 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS1009 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法
shehuiyuelaiyuehao9 小时前
算法56,重排链表
数据结构·算法·链表
qq_4523962310 小时前
第四篇:《索引原理与实战:B-tree、Hash、GIN、GiST、BRIN》
算法·哈希算法·gin