算法奇妙屋(三十六)-贪心算法学习之路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;
    }
}
相关推荐
Yfhonier3 分钟前
岛屿数量(DFS)
算法·深度优先
橘子汽水1684 分钟前
Leetcode15:三数之和
java·数据结构·算法
黄金龙PLUS7 分钟前
ASCON置换算法的优缺点
算法·网络安全·密码学·哈希算法·同态加密
邪修king13 分钟前
Re:Linux 系统篇(十六):进程篇(五):O (1) 调度算法深度解析 —— 优先级数组、位图优化与活跃 / 过期双队列
linux·运维·算法
在线考试系统推荐19 分钟前
拆成多道小题,优考试“理解题“怎么用?
服务器·人工智能·学习
Yfhonier29 分钟前
6440. 极大连通图个数(DFS)
数据结构·算法·深度优先
2301_8026510832 分钟前
linux系统的学习:网络
linux·网络·学习
玖玥拾41 分钟前
LeetCode 1 两数之和
算法·leetcode·职场和发展
Cccp.12341 分钟前
【leetcode】(一)认识复杂度和简单排序算法
算法·排序算法