名企笔试:美团2016招聘笔试(股票交易日)

名企笔试:美团2016招聘笔试(股票交易日)

题目描述

在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。

给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。

测试样例:
[10,22,5,75,65,80],6

返回:87

import java.util.Scanner;
public class Stock trading day {
	public static void main(String[] args) {
		  /*输入价格序列*/
		  Scanner sc=new Scanner(System.in);
		  while(sc.hasNext()){
			  int n=sc.nextInt();
			  int price[]=new int[n];//价格序列
			  for(int i=0;i<price.length;i++){
				  price[i]=sc.nextInt();
			  }
			  int priceChange[]=new int[price.length];//价格序列相邻两个值的差值
			  for(int i=1;i<priceChange.length;i++){
				  priceChange[i]=price[i]-price[i-1];
			  }
			  
			 /* for(int i=0;i<priceChange.length;i++){
				 System.out.print(priceChange[i]+" ");;
			  }
			  System.out.println();*/
			  
			  /*遍历价格差值数组 从左到右*/
			  int sum=0,maxProfit=0;//最大利润
			  int max=0;
			  int b[]=new int[priceChange.length];
			  int c[]=new int[priceChange.length];
			  for(int i=1;i<priceChange.length;i++){
				 if(sum<0){
					 sum=0; 
				  } 
		          sum+=priceChange[i];
		          if(max<sum){
		        	  max=sum;
		        	  b[i]=sum;
		          }else{
		        	 b[i]=max;
		          }
			  }
			 /* for(int i=0;i<b.length;i++){
				  System.out.print(b[i]+" ");  
			  }
			  System.out.println(); */
			  
			  /*遍历价格差值数组 从右到左*/
			  sum=0;
			  max=0;
			  for(int i=priceChange.length-1;i>0;i--){
					 if(sum<0){
						 sum=0; 
					  } 
			          sum+=priceChange[i];
			          if(max<sum){
			        	  max=sum;
			        	  c[i]=sum;
			          }else{
			        	 c[i]=max;
			          }
				  }
			  /*for(int i=0;i<b.length;i++){
				  System.out.print(c[i]+" ");
			  }
			  System.out.println(); */
			 
			 for(int i=1;i<priceChange.length;i++){
				 if(maxProfit<b[i-1]+c[i]){
					 maxProfit=b[i-1]+c[i];
				 }
			 } 
			  System.out.println("最大利润为:"+maxProfit);
		  } 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值