算法奇妙屋(三十六)-贪心算法学习之路3

文章目录

一. 力扣 121. 买卖股票的最佳时机

1. 题目解析

这道题很好理解, 相当于找最大值和最小值的问题

2. 算法原理

3. 代码

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int min = prices[0];
        int ret = 0;
        for (int i = 1; i < prices.length; i++) {
            min = Math.min(min, prices[i]);
            ret = Math.max(ret, prices[i] - min);
        }
        return ret;
    }
}

二. 力扣 122. 买卖股票的最佳时机 II

1. 题目解析

这道题相比于股票问题1, 少了个限制是, 可以多次买卖股票

2. 算法原理

这里提供两种思路, 一种是双指针, 一种是拆分交易, 时间复杂度都是O(N)

(1) 贪心+双指针

(2) 拆分交易

3. 代码

1. 算法1

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int ret = 0;
        for (int i = 0; i < n;) {
            int j = i;
            while (j < n - 1 && prices[j + 1] > prices[j]) j++;
            ret += prices[j] - prices[i];
            i = j + 1;
        }
        return ret;
    }
}

2. 算法2

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int ret = 0;
        for (int i = 0; i < n - 1; i++) {
            if (prices[i + 1] > prices[i]) {
                ret += prices[i + 1] - prices[i];
            }
        }
        return ret;
    }
}
相关推荐
QQsuccess2 小时前
人工智能(AI)全体系学习——系列二
人工智能·学习·机器学习
console.log('npc')2 小时前
2026前端进阶学习路线
前端·学习
逆境不可逃2 小时前
LeetCode 热题 100 之 138. 随机链表的复制 148. 排序链表 23. 合并 K 个升序链表 146. LRU 缓存
算法·leetcode·职场和发展
Q741_1472 小时前
每日一题 力扣 3546. 等和矩阵分割 I 前缀和 贪心 剪枝 C++ 题解
算法·leetcode·前缀和·矩阵·剪枝·贪心
我是咸鱼不闲呀2 小时前
力扣Hot100系列23(Java)——[回溯]总结(上)(全排列,子集,电话号码的字母组合,组合总和)
java·算法·leetcode
tobias.b2 小时前
深度学习 超清晰通俗讲解 + 核心算法 + 使用场景
人工智能·深度学习·算法
七夜zippoe2 小时前
量子计算入门:Qiskit框架实战
python·算法·量子计算·ibm·qiskit
小此方2 小时前
Re:从零开始的 C++ STL篇(八)深度解构AVL树自平衡机制:平衡维护与旋转调整背后的严密逻辑
开发语言·数据结构·c++·算法·stl