Say you has an array for which the i-th element is the price of a given-stock on day I.
If you were-permitted-to-complete at most one transaction (ie, buy one and sell one share of the stock), design an AL Gorithm to find the maximum profit.
Solution 1:
Find each minimum, find a maximum value after each minimum, and calculate the maximum benefit. Compare each of the maximum benefits.
Public classSolution { Public intMaxprofit (int[] prices) { if(Prices = =NULL|| Prices.length = = 0 | | Prices.length = = 1) return0; intMaxprofit =Integer.min_value; intDatein = 0; while(Datein < Prices.length-1) { //Find a bottom while(Datein < prices.length-1 && Prices[datein] >= prices[datein+1]) Datein++; for(inti=datein+1; i<prices.length; i++) { if(Prices[i]-Prices[datein] >Maxprofit) {Maxprofit= Prices[i]-Prices[datein]; } } //Find a top while(Datein < prices.length-1 && Prices[datein] <= prices[datein+1]) Datein++; } returnMaxprofit = = Integer.min_value? 0: Maxprofit; }}
Solution 2:
First of all, the data is calculated, the difference between the first element and the previous element is 0, for example, 1,4,2 is 0,3,-2 after finishing;
Calculates the sum of a continuous array element and the maximum value of the summation.
Public classSolution { Public intMaxprofit (int[] prices) { if(Prices = =NULL|| Prices.length < 2) return0; for(intI=prices.length-1; i>0; i--) {Prices[i]= Prices[i]-prices[i-1]; } prices[0] = 0; intMaxprofit = 0; intProfit = 0; for(inti=0; i<prices.length; i++) {Profit+=Prices[i]; if(Profit < 0) {Profit= 0; } Else if(Profit >Maxprofit) {Maxprofit=profit; } } returnMaxprofit; }}
LeetCode-121 best time to Buy and Sell Stock