121 Best Time to Buy and Sell Stock

输入:一个数组prices,prices[i]表示第i天股票的价格。
输出:买卖股票的最大收益。
规则:只允许最多买一次,最多卖一次股票。如果觉得价格不合适,可以不买卖。
分析1:最先想到的是暴力搜索,每天都可以买或者卖,当然要符合规则。倒是AC了,但是时间太长。这个复杂度应该是2^n。

	private int maxProfit;public int maxProfit(int[] prices) {maxProfit = 0;trasaction(prices,0,false,true,0);return maxProfit;}private void trasaction(int[] prices,int idx,boolean sell,boolean buy,int profit){if(idx==prices.length){maxProfit = Math.max(maxProfit,profit);}else{if(buy){trasaction(prices,idx+1,true,false,profit-prices[idx]);}else if(sell){maxProfit = Math.max(maxProfit,profit+prices[idx]);}trasaction(prices,idx+1,sell,buy,profit);}}

分析2:这是参考别的答案。只要找到最低成本minPrice,如果其下标为i,只要j>i,prices[j]-minPrice就是收益。各个收益取最大值。这是技巧问题,背多次,形成这样的思维。

	public int maxProfit(int[] prices) {int maxProfit = 0;int minPrice = Integer.MAX_VALUE;for(int i=0;i<prices.length;i++){minPrice = Math.min(minPrice,prices[i]);maxProfit = Math.max(maxProfit,prices[i]-minPrice);}return maxProfit;}

进阶题目122:可以多次买卖股票。但是得先买股票才能卖股票。如果已经买了股票,需要卖了,才能再买。
分析1:暴力购买。超时。
学习1:参考网页。收益profit是子收益sub-profit的和。在第i天购买,第j天卖,每个sub-profit是不同的。在[i,j]范围内我们该怎么选择才能让sub-profit最大呢?我们应该找到的j是在这个范围内prices[j]是尽可能大的那个值,i是在这个范围内prices[i]尽可能小的那个值。
 举例来说。我们有数组[3,2,5]。我们会选择[2,5],而不会选择[3,5],因为2<5。
 如果数组[3,2,5,8],我们会选择[2,8],因为5<8。
 从这两个例子,我们观察到我们选择购买的那个x应该是一个连续值中的最小值。我们卖出去的那个y应该一个连续序列中的最大值。
 再举个例子。[3,2,5,8,1,9],虽然1是最小值,但是我们选择2,因为2是一个连续递减序列的最小值(从3开始)。同样虽然9是最大值,但是我们选择8。因为8是从2开始的连续递增序列的最大值。
 实际上,[3,2,5,8,1,9]被分成了2个子数组,分别选择[2,8]和[1,9]。

	public int maxProfitV2(int[] prices) {int maxProfit = 0;int i=0;int n = prices.length;while(i<n-1){while(i<n-1 && prices[i+1]<=prices[i]) i++;int buy = prices[i];while(i<n-1 && prices[i+1]>prices[i]) i++;int sell = prices[i];maxProfit += sell - buy;}return maxProfit;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三十六期:学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫&#xff0c;大家想起的估计都是 Python &#xff0c;诚然爬虫已经是 Python 的代名词之一&#xff0c;相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫&#xff0c;其实 Java 也能做网络爬虫而且还能做的非常好&#xff0c;在开源社区中有不少…

前端之盒子模型

CSS之盒子模型 margin: 用于控制元素与元素之间的距离&#xff1b;margin的最基本用途就是控制元素周围空间的间隔&#xff0c;从视觉角度上达到相互隔开的目的。padding: 用于控制内容与边框之间的距离&#xff1b;Border(边框): 围绕在内边距和内容外的边框。Content(内容): …

[Leetcode][第977题][JAVA][有序数组的平方][排序][双指针]

【问题描述】[简单] 【解答思路】 1. 排序 平方后排序 没有使用排序的特性 时间复杂度&#xff1a;O(NlogN) 空间复杂度&#xff1a;O(1) class Solution {public int[] sortedSquares(int[] A) {int[] ans new int[A.length];for (int i 0; i < A.length; i) {ans[i] …

开始《数据机构与算法之美》之旅

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 还在学算法&#xff0c;就像还在学英语一样悲催。想想自己为什么要学算法。学&#xff0c;是为了用。学了&#xff0c;能理解Java API提供的接口和数据结构的实现方式…

第三十七期:为什么2019年人工智能算法岗求职竞争如此激烈?

在各公司全面数据化智能化的当下&#xff0c;算法岗本该更受青睐&#xff0c;为何突然成了就业重灾区?除了暴力劝退&#xff0c;本文将从几个不同角度来分析当前算法岗的求职就业情况。 作者&#xff1a;皮皮鲁的AI星球 与前几年媒体报道的人工智能毕业生高薪难求形成鲜明对比…

[LeetCode] 141. Linked List Cycle 单链表判圆算法

TWO POINTER 快指针速度2 &#xff0c; 慢指针速度1 相对速度1&#xff0c;有环必然相遇 public class Solution {public boolean hasCycle(ListNode head) {ListNode fast head,slow head;while(fast!null && fast.next!null){slow slow.next;fast fast.next.next…

[Bugku][Web][CTF] 9-15 write up

【说明】 整合资源 简略版本2020Bugku write up Bugku Web第九题 关键字 &#xff1a;/?argsGLOBALS PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问&#xff0c;也可以直接用来更新全局变量。 Web 第十题…

第三十八期:用Git帮助写作者更好地完成工作

如果你是一名写作者&#xff0c;你也能从使用 Git 中受益。在我们的系列文章中了解有关 Git 鲜为人知的用法。 作者&#xff1a;佚名 如果你是一名写作者&#xff0c;你也能从使用 Git 中受益。在我们的系列文章中了解有关 Git 鲜为人知的用法。 Git 是一个少有的能将如此多的…

报错

报错 报错&#xff1a; 2019-05-31 11:38:42.645 WARN 18756 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class net.a…

[Bugku][Web][CTF] 16-29 write up

【说明】 整合资源 简略版本2020Bugku write up web16 备份是个好习惯 /index.php.bak 查看php代码 1.因为md5&#xff08;&#xff09;函数加密不能处理数组&#xff0c;则key1和key2的返回值为空&#xff0c;即可获得flag http://123.206.87.240:8002/web16/?kkeyey1[]1&am…

数据结构一—— 数组

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 如何实现随机访问 数组是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表 线性表的数据最多只有前和后两个方向。…

第三十九期:1024特别版:向“程序媛们”致敬!

对女性程序员而言&#xff0c;似乎怎么选择都是错&#xff1a;闯入男性领地&#xff0c;输了&#xff0c;会强化社会对女性的固有刻板印象&#xff1b;赢了&#xff0c;打破了职业性别固化&#xff0c;会导致整个职业收入的下降。 作者&#xff1a;奇点、轻音 “到家得十二点半…

django-中间件

1.django中间件的5个方法 process_request(self,request) process_view(self, request, callback, callback_args, callback_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, respons…

第四十期:十年生死两茫茫,Linux QQ突然复活!

就在 1024 将将过去的深夜&#xff0c;突然&#xff0c;有人在 QQ 群内丢了一个链接和一句话“Linux QQ 发布了”&#xff0c;顿时在静悄悄的 QQ 群内&#xff0c;大家纷纷冒了出来。一时间&#xff0c;群内就和开了锅一样热闹&#xff0c;大家纷纷抄起心爱的土琵琶 Linux&…

数据结构二——链表

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 底层存储 数组&#xff1a;一块连续的内存空间。 链表&#xff1a;用指针串起来的一组零散的内存空间。 链表分类&#xff1a;单链表、双向链表、循环链表 单链表…

[Bugku][Web][CTF] 30-33 write up

【说明】 整合资源 简略版本2020Bugku write up web30 关键字&#xff1a; txt or file_get_contents(fn)知识点&#xff1a;filegetcontents(fn) 知识点&#xff1a; file_get_contents(fn)知识点&#xff1a;fileg​etc​ontents(fn) 联想 php://input 步骤&#xff1a; 1.1…

UML作业第五次:分析系统,绘制状态图

一. PlantUML状态图 语法学习小结 1.简单状态 我们使用[*]开始和结束状态图&#xff0c;使用-->添加箭头。 startuml [*] --> Test1 Test1 --> [*] Test1 : this is a test Test1 : this is another testTest1 -> Test2 Test2 --> [*] enduml 2.更改状态渲染 我…

第四十一期:从Windows到鸿蒙——操作系统的前世与今生

世界上操作系统生意做得最好的是微软&#xff0c;但是世界上第一个做操作系统生意的不是微软&#xff0c;Windows也不是世界上最好用的系统。 作者&#xff1a;苏亚 “做一个操作系统的技术难度不大&#xff0c;难度大的是生态。”——任正非 华为被谷歌断供之后&#xff0c…

算法一——排序

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 分析排序算法的角度 算法的执行效率 算法的执行效率一般从时间复杂度以及比较、交换次数来考虑。 时间复杂度 时间复杂度需要考虑最好情况、最坏情况、平均情况时…

[Bugku][Crypto][CTF][2020]Crypto 1-20 write up

工具&#xff1a;CaptEncoder https://www.freebuf.com/sectool/188397.html Convert:https://pan.baidu.com/s/17YPXfvBHl_HyA00AffTBvg 密码&#xff1a;skqw 推荐网站&#xff1a;http://ctf.ssleye.com/ Crypto 1 关键字&#xff1a; 莫斯 /.- 步骤&#xff1a;莫斯解码得…