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


相关文章
|
8天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
24天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
5天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
17天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
24天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
24天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
24天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
33 0
|
1月前
|
安全 IDE Java
Java语言基础
Java语言基础
13 0
|
9天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
10天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3