每日AC-小米笔试 风口的猪-中国牛市
题目描述
风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100
输入例子:
3,8,5,1,7,8
输出例子:
12
很简单,没啥说的
动态规划的思想,注意边界条件,将数组分成两份, 每一份都可以买入卖出
看代码:
/**
* 类说明
*
* <pre>
* Modify Information:
* Author Date Description
* ============ =========== ============================
* DELL 2017年6月12日 Create this file
* </pre>
*
*/
public class FenKouShangZhu {
public static int getMax(int[] arr,int start, int end){
//有两次买入卖出机会,必须买入,必须卖出后才能卖出
int max = 0;
int len = arr.length;
if(start>=0 && start<= len-1&& end<= len-1 && end>= 0){
int min = arr[start];
for(int i = start; i <= end; i++){
if(arr[i] <min){
min = arr[i];
}
if(arr[i] -min > max){
max = arr[i] -min;
}
}
}
return max;
}
public static int calculateMax(int prices[]){
int value = 0;
int len = prices.length;
/* if(len==2){
return ((prices[1]-prices[0])>0)?(prices[1]-prices[0]):0;
}*/
for(int i = 0; i <=len-1;i++){
int tmp = getMax(prices,0, i)+getMax(prices,i+1,len-1);
if(tmp > value){
value = tmp;
}
}
return value;
}
/**
* @param args
*/
public static void main(String[] args) {
int arr[] ={3,8,5,1,7,8};
int[] arr1 ={31,41};
int[] arr2 ={5,49,75,99};
int ans = calculateMax(arr1);
System.out.println(ans);
}
}