每日AC-小米笔试 风口的猪-中国牛市


每日AC-小米笔试 风口的猪-中国牛市


题目描述

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100 
输入例子:
3,8,5,1,7,8

输出例子:
12

很简单,没啥说的


动态规划的思想,注意边界条件,将数组分成两份, 每一份都可以买入卖出


看代码:

/**
 * 类说明
 * 
 * 
 * Modify Information:
 * Author        Date          Description
 * ============ =========== ============================
 * DELL          2017年6月12日    Create this file
 * 
* */ 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] 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); } }











你可能感兴趣的:(每日AC-小米笔试 风口的猪-中国牛市)