Leetcode 123. Best Time to Buy and Sell Stock III JAVA语言

简介:
1
2
3
4
5
6
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 at most two transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
 
Subscribe to see which companies asked this question.

题意:股票的买入卖出。你只有两次机会买入卖出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public  class  Solution {
     public  int  maxProfit( int [] prices) {
         if (prices== null  || prices.length< 2 ) return  0 ;
         //O(n^2)哎
         int  sum= 0 ;
         for ( int  i= 1 ;i<prices.length;i++){
             int  temp=getMax(prices, 0 ,i)+getMax(prices,i+ 1 ,prices.length- 1 );
             if (temp>sum)sum=temp;
         }
         return  sum;
     }
     public  static  int  getMax( int [] prices, int  left, int  right){
         if (left>=prices.length) return  0 ;
         int  Min=prices[left];
         int  sum= 0 ;
         for ( int  i=left+ 1 ;i<=right;i++){
             Min=Math.min(Min,prices[i]);
             sum=Math.max(sum,prices[i]-Min);
         }
         System.out.println(sum);
         return  sum;
     // }
     // //first[i]从左往右遍历,表示到第i天时卖出能赚到的最大钱
     // int[] first=new int[prices.length];
     // //second[i]从右往左遍历,表示从第i天到最后一天能赚到的最大钱。本质还是分两部分计算。只不过是分开两次扫描数组
     // int[] second=new int[prices.length];
     // int min=prices[0];
     // for(int i=1;i<prices.length;i++){
     //     min=Math.min(min,prices[i]);
     //     first[i]=Math.max(first[i-1],prices[i]-min);
     // }
     // // for(int i=0;i<prices.length;i++){
     // //     System.out.println(first[i]);
     // // }
     // int max=prices[prices.length-1];
     // for(int i=prices.length-2;i>=0;i--){
     //     max=Math.max(max,prices[i]);
     //     second[i]=Math.max(second[i+1],max-prices[i]);
     // }
     // int ret=0;
     // for(int i=0;i<prices.length;i++){
     //     //System.out.println(second[i]);
     //     ret=Math.max(first[i]+second[i],ret);
     // }
     
     // return ret;
}
}

PS:解法一是直接以第i天为界,求两边的最大收益。但是需要O(N^2)。

优化:用俩数组,遍历两次。

本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1910811


相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
97 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
1月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
56 4
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
64 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
103 4
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
88 2
|
2月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?
|
2月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
128 2