Best Time to Buy and Sell Stock II 最佳时间买入卖出股票(多次买卖)@LeetCode

leetcode题目:Best Time to Buy and Sell Stock II 立即下载

题目:

最佳时间买入卖出股票:你有一个数组保存了股票在第i天的价钱,现在你可以进行多次买入卖出,但同一时间你手上只能保持一个股票,如何赚的最多

思路:

贪心法,本题和前面的Best Time to Buy and Sell Stock 不同在于,本题可以多次买卖股票,
从而累积赚取所有的价格差。因此用贪心法,基本思想是锁定一个低价,然后在价格升到局部最高点
(即下一天的价钱就下降了)时候,抛出股票,然后把下一天较低的价钱作为买入,接着计算。
要注意最后要处理最后一次的利润


package Level3;

/**
 * Best Time to Buy and Sell Stock II
 * 
 *  Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. 
You may complete as many transactions as you like 
(ie, buy one and sell one share of the stock multiple times). 
However, you may not engage in multiple transactions at the same time 
(ie, you must sell the stock before you buy again).
 *
 */
public class S122 {

	public static void main(String[] args) {
		int[] prices = {2,1,2,0,4};
		System.out.println(maxProfit(prices));
	}

	// 贪心法,本题和前面的Best Time to Buy and Sell Stock 不同在于,本题可以多次买卖股票,
	// 从而累积赚取所有的价格差。因此用贪心法,基本思想是锁定一个低价,然后在价格升到局部最高点
	// (即下一天的价钱就下降了)时候,抛出股票,然后把下一天较低的价钱作为买入,接着计算。
	// 要注意最后要处理最后一次的利润
	public static int maxProfit(int[] prices) {
		if(prices.length == 0){
			return 0;
		}
        int totalProfit = 0;
        int startIndex = 0;
        int i;
        
        for(i=1; i<prices.length; i++){
        	if(prices[i] < prices[i-1]){	// 因为第i天的价钱就下降了,因此把从startIndex到i-1的利润积累到总利润中
        		totalProfit += prices[i-1] - prices[startIndex];
        		startIndex = i;		// 更新startIndex
        	}
        }
    	// 记得要处理最后一次的利润
        if(prices[i-1] > prices[startIndex]){
        	totalProfit += prices[i-1] - prices[startIndex];
        }
        
        return totalProfit;
    }
}


Again:

public class Solution {
    public int maxProfit(int[] prices) {
        
        if(prices.length == 0){
            return 0;
        }
        
        int profits = 0;
        int minBuy = prices[0];
        for(int i=1; i<prices.length; i++){
            if(prices[i] < prices[i-1]){
                profits += prices[i-1]-minBuy;
                minBuy = prices[i];
            }else{
                
            }
        }
        if(prices[prices.length-1] > minBuy){
            profits += prices[prices.length-1]-minBuy;
        }
        return profits;
    }
}


其实最简单的做法是:

计算每个相邻的diff差,只要diff大于0,就累积起来

public class Solution {
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if(len == 0) {
            return 0;
        }
        
        int max = 0;
        for(int i=1; i<len; i++) {
            int diff = prices[i] - prices[i-1];
            if(diff > 0) {
                max += diff;
            }
        }
        return max;
    }
}






状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现) 内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。 立即下载

相关推荐

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案

GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。

weixin_35756637的博客 626

【Leetcode】122. Best Time to Buy and Sell Stock II买卖股票的最佳时机 II

Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II买卖股票的最佳时机 II Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You...

weixin_42703504的博客 268

Python实战:用Py2neo轻松玩转Neo4j图数据库(附完整CRUD示例)

本文通过构建武侠知识图谱的实战案例,详细介绍了如何使用Python的Py2neo库对Neo4j图数据库进行CRUD操作。内容涵盖环境搭建、节点与关系创建、Cypher查询、数据更新删除及事务管理,帮助开发者直观高效地处理复杂关联数据,实现从入门到进阶的完整交互流程。

weixin_29034963的博客 185

【LeetCode】Best Time to Buy and Sell Stock II(买卖股票的最佳时机 II)

这道题是LeetCode里的第122道题。 题目描述: 给定一个数组,它的第i个元素是一支给定股票第i天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)...

『诞生之时已至,以此修正万象』 208

Xilinx Vitis arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument

This problem may be a bugof version 2021.1 only. Unfortunately, I'm just currently using this version. After Build Project: Find where this Makefile is through "make: Leaving directory" information. For me, it is located atZynq_CPU_wrapper_hw_platfo...

Ayka的博客 6660

二、基于C语言的JPEG解码代码详解

// JPEG解码 // 输入JPEG后输出Bitmap #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) unsigned int BuffIndex; // JPEG数据的位置 unsigned int BuffSize; // JPEG数据的大小 unsigned int BuffX; // 图像的横向尺寸 unsigned int BuffY; //

m0_37633745的博客 4455

122. 买卖股票的最佳时机 II-一次遍历

一、题目描述 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。 示例 1: 输入:prices = [7,1,5,3,6,4] 输出:7 解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。 随后,在第 4

hequnwang10的博客 688

项目回顾一:《高速多端口共享缓存模块》

本帖子仅为了回顾一下一年前自己动手完成的第一个数字ic设计项目的历程,为复试做一下准备,完成的这个sramc模块花了整整四个月的时间,从0到12个模块的代码产出以及模块的验证,虽然没有拿奖,也没有进入复赛,设计过程中使用的技术手段和算法也不太成熟,但这这是一个值得记录的过程!

weixin_60261760的博客 1254

【LeetCode 面试经典150题】122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机II

在每一天,你可以决定买入和/或卖出股票。你在任何时候最多只能持有一股股票。然而,你可以在同一天买入后立即卖出。这段代码的目的是计算给定股票价格数组中可以实现的最大利润,允许多次买卖。找出并返回你能获得的最大利润。

qq_43513394的博客 541

EDEM-fluent耦合时出现的问题及摸索出的解决办法及DPM颗粒信息导出

EDEM-fluent耦合时出现的问题及摸索出的解决办法及DPM颗粒信息导出

zheaa的博客 5749

【Android 11】使用Android Studio调试系统应用之Settings移植(三):构建Settings、SettingsLib项目文件

基于android 11,本系列文章力争实用,讲解使用AS调试系统app的方法,并提供了配套源下载,供学习调试。上一篇文章[Android 11]使用Android Studio调试系统应用(二):依赖分析、android.bp、静态和动态依赖,讲解了如何搭建编译服务器,如何下载AOSP源码,如何切换到AOSP的指定分支(android-11-r39),以及如何编译、解决编译错误、运行模拟器,本文将开始讲解如何构建Settings的AS工程文件! 走过、路过,有用过的同学,记得给个赞O(∩_∩)O哈!

上周的博客 2679

算法练习(42):Best Time to Buy and Sell Stock II

题意:给出一个数组,每个数代表当天股票的价格,有无数次买卖股票的机会,但是持有时不能买另一个。问最大收益。 分析与思路:这道题设计到波峰波谷的概念,有两种思路。 1.可以每两个相邻的票价满足有收益都买(贪婪算法) 2.只买最近的极小值,只卖当前极小值后最近的极大值。 代码: 1. class Solution { public: int maxProfit(vector& price

KingsonYing的博客 345

基于唤醒音频的目标说话人语音识别系统设计报告

摘要 本报告设计了一套基于唤醒音频的目标说话人语音识别系统,通过五级流水线架构(唤醒检测→声纹注册→语音分离→目标ASR→拒识决策)解决复杂声学场景下的目标说话人识别问题。系统整合ECAPA-TDNN声纹模型、Conv-TasNet语音分离网络和Whisper ASR引擎,在L20 GPU上实现高效端到端推理,支持-5dB~5dB SNR范围和0~100%重叠率的双人语音场景处理。系统在目标说话人CER、拒识率和推理效率等关键指标上均达到设计目标,为智能语音交互提供了有效的身份感知解决方案。

huanghm88的专栏 73

Best Time to Buy and Sell Stock II @leetcode

1 int maxProfit(vector<int> &prices) { 2 // IMPORTANT: Please reset any member data you declared, as 3 // the same Solution instance will be reused for each test ...

weixin_30628801的博客 82

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode 题解之 121. Best Time to Buy and Sell Stock

121. Best Time to Buy and Sell Stock 题目描述和难度 题目描述: 给定一个数组,它的第&amp;amp;nbsp;i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 ...

李威威的博客 585

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Best Time to Buy and Sell Stock II(C++买卖股票的最佳时机 II)

Best Time to Buy and Sell Stock II(C++买卖股票的最佳时机 II)

coolsunxu的博客 118

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode 122 Best Time to Buy and Sell Stock II(股票买入卖出的最佳时间 II)

题目描述: Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like

新博客地址:www.yizhen-blog.com 欢迎交流 432

leetcode122. Best Time to Buy and Sell Stock II (买卖股票的最佳时机 II)

考虑买股票的策略:设今天价格p1,明天价格p2,若p1 < p2则今天买入明天卖出,赚取p2 - p1; 若遇到连续上涨的交易日,第一天买最后一天卖收益最大,等价于每天买卖(因为没有交易手续费); 遇到价格下降的交易日,不买卖,因此永远不会亏钱。 赚到了所有交易日的钱,所有亏钱的交易日都未交易,理所当然会利益最大化。 class Solution(object): def maxPr...

爱喝舒化奶的博客 282

Leetcode_C++笔记之122. Best Time to Buy and Sell Stock II(买卖股票的最佳时机II)

这个题之前做过的,但是忘记了。2、贪心算法求上升区间高度和。

JayShaun的博客 500

LeetCode(4), Best Time to Buy and Sell Stock II, 买卖股票的最佳时机II

Best Time to Buy and Sell Stock II Description Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete ...

焦下鹿的博客 236

LeetCode.Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy one...

wonglyx的博客 206

快速求素数序列方法

唉,说来尴尬,居然写不出来快速求素数的方法,回来查了查,整理了一下思路 其实思路也很简单,记住一条定理即可。 定理:如果n不是素数,则n有一个素数因子d,并且满足: 1 证明:如果n不是素数, 则由定义,n有一个因子d满足: 1 这样的话就可以直接定义一个素数序列来判断了,而不用逐一或者逐二(跳过偶数)来寻找因子 #include "stdi

GVFDBDF的专栏 1625

LeetCode -- Best Time to Buy and Sell Stock II (贪心策略,差分序列)

LeetCode -- Best Time to Buy and Sell Stock II (贪心策略,差分序列) IT code Interview 程序员面试题,贪心策略,差分序列

艾斯 2353

关于LeetCode中Best Time to Buy and Sell Stock一题的理解

题目如下: Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the

zsy112371的专栏 3166

Best Time to Buy and Sell Stock 买股票系列三连

Leetcode里的买卖股票系列非常有名。之前做过这个系列里面的三道,分别是:121 Best Time to Buy and Sell Stock其中第一道题的要求是只能交易一次,因此就是寻找数组内正向的最大差值,解法是维护一个min变量存储当前遇到的最低股价,维护一个max存储当前可能的最大利润(用当前股价减去min),一次顺序遍历数组最后返回max就ok了。代码:int maxProfit(...

lujie1996的博客 2385

LeetCodes——Best Time to Buy and Sell Stock【系列问题】

Best Time to Buy and Sell Stock系列问题在面试过程中经常遇到,这里将下面几种问题做一个总结。 1.121 Best Time to Buy and Sell Stock 2.122 Best Time to Buy and Sell Stock II 3.123 Best Time to Buy and Sell St...

nairely 3777
上一篇: Triangle 三角形求最小路径和 @LeetCode
下一篇: Best Time to Buy and Sell Stock III 最佳时间买入卖出股票(最多两次买卖)@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值