1. 程式人生 > >小米實習生筆試題Java程式碼

小米實習生筆試題Java程式碼

題目描述

風口之下,豬都能飛。當今中國股市牛市,真可謂“錯過等七年”。 給你一個回顧歷史的機會,已知一支股票連續n天的價格走勢,以長度為n的整數陣列表示,陣列中第i個元素(prices[i])代表該股票第i天的股價。 假設你一開始沒有股票,但有至多兩次買入1股而後賣出1股的機會,並且買入前一定要先保證手上沒有股票。若兩次交易機會都放棄,收益為0。 設計演算法,計算你能獲得的最大收益。 輸入數值範圍:2<=n<=100,0<=prices[i]<=100
輸入例子:
3,8,5,1,7,8

輸出例子:
12

程式碼:

public class MiEquityMarket
{
public static int equityMarket(List<Integer> list){ int result = 0; List<Integer> newli = new ArrayList<Integer>(); int maxGap =0,temp = 0;; for(int i=1;i<list.size();i++){ int gap = list.get(i) - list.get(i-1); newli.add(gap); if
(gap>=0){ temp+=gap; }else{ if(temp>maxGap){ result = maxGap>result?maxGap:result; maxGap = temp; }else{ result = temp>result?temp:result; } temp = 0
; } } System.out.println("差值陣列: "+newli.toString()); System.out.println(result+","+maxGap+","+temp); result = result+maxGap+temp-Math.min(result, Math.min(maxGap, temp)); return result; } /** * * @author mingo * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<Integer> li = new ArrayList<Integer>(); //li.add(3);li.add(8);li.add(5);li.add(1);li.add(7);li.add(8); for(int i=0;i<10;i++){ li.add((int) Math.round(Math.random()*10)); } System.out.println("輸入陣列: "+li.toString()); int rs = equityMarket(li); System.out.println("返回值: "+rs); } }