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


相关文章
|
7月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
357 4
|
8月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
6月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
424 18
|
6月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
260 4
|
7月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
306 15
|
8月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
614 0
|
8月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
8月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
396 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
471 2
下一篇
开通oss服务