分享某公司JAVA实习生招聘代码面的一道题

题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。

n、s、B、S

其中n代表委托信息个数,s为最热门的委托信息的个数,B代表买入、S代表卖出。最热门的委托:卖出时价格越高越热门,买入时价格越低越热门。

(其中:

输入时,

6 2,表示委托信息个数为6,输出其中最热门的买入与卖出信息各2条。

B 50 2,表示买入价格为50的股票,数量为2。

输出时,

合并价格一样的委托,依次输出买入与卖出委托中最热门的s条委托(先输出买入)

买入按价格升序输出,卖出按价格降序输出)


例如

输入:

6 2

B 50 2 

S 50 1 

S 20 2 

S 30 1 

B 40 4 

B 50 6


输出:

B 40 4
B 50 8
S 50 1
S 30 1


我的代码:

import java.util.*;
import java.io.*;


public class Main implements Comparable<Main> {
	private String type;
	private int price;
	private int num;
		
		
		public int compareTo(Main that)
		{
		  if(that.type.equals("B"))
		  {			
			if(this.price>that.price)return +1;
			else if(this.price<that.price)return -1;
		  	return 0;
		  }
		  if(that.type.equals("S"))
		  {
		  	if(this.price>that.price)return -1;
			else if(this.price<that.price)return +1;
		  	return 0;
		  }
	
		
		
		return 0;
		}
			


	public Main() {
		// TODO Auto-generated constructor stub
	}


    public static void main(String[] args)
    {
    	int n=0;
    	int s=0;
    	int i=0;
    	int salenum=0;
    	int buynum=0;
    	int v=0;
 		
    	int letter=0;
    	
    	Scanner in=new Scanner(System.in);
    	n=in.nextInt();
    	s=in.nextInt();
    	Main[] aux1=new Main[n];
    	
    	Map<Integer,Integer>salemap = new HashMap<Integer, Integer>();
    	Map<Integer,Integer>buymap = new HashMap<Integer, Integer>();   


        
    	for(;i<n;i++)
    	{
    		
    		aux1[i]=new Main();
    		aux1[i].type=in.next();
    		aux1[i].price=in.nextInt();
    		aux1[i].num=in.nextInt();
    		if(aux1[i].type.equals("S"))
    		{
    			if(salemap.get(aux1[i].price)==null)
	    			 {letter=aux1[i].num;}
    			else
    				{letter=salemap.get(aux1[i].price).intValue()+aux1[i].num;}
    			salemap.put(aux1[i].price,letter);
    		}	
    		
    		else if(aux1[i].type.equals("B"))
        		{
        			if(buymap.get(aux1[i].price)==null)
    	    			 {letter=aux1[i].num;}
        			else
        				{letter=buymap.get(aux1[i].price).intValue()+aux1[i].num;}
        			buymap.put(aux1[i].price,letter);
        		}	
        		
    	
    		
    
    	}
    	
    
		 salenum=salemap.size();
		 buynum=buymap.size();
		 Main[] buy=new Main[buynum];
		 Main[] sale=new Main[salenum];
		 int t1=0;int t2=0;
		 for(int x=0;x<i;x++)
		 {
		 	if(aux1[x].type.equals("B"))
		 	{
		 	
		 		if(buymap.containsKey(aux1[x].price))
		 		{
		 			buy[t1]=new Main();
		 			v=buymap.get(aux1[x].price).intValue();
		 			buy[t1].type="B";
		 			buy[t1].price=aux1[x].price;
		 			buy[t1].num=v;
		 			buymap.remove(aux1[x].price);
		 			t1++;
		 			
		 		}
		 		
		 	}
		 			
			else  
			 	{
			 	
			 		if(salemap.containsKey(aux1[x].price))
		 			{
		 			sale[t2]=new Main();
		 			v=salemap.get(aux1[x].price).intValue();
		 			sale[t2].type="S";
		 			sale[t2].price=aux1[x].price;
		 			sale[t2].num=v;
		 			salemap.remove(aux1[x].price);
		 			t2++;
		 			
		 			}
		 			
			 	}
		 }
	
		
    	 Arrays.sort(sale); 
    	 
    	 Arrays.sort(buy);
    	
    
		for(i=0;i<Math.min(buynum,s);i++)
    	 {
    	 
    	 System.out.print(buy[i].type+" ");
    	 System.out.print(buy[i].price+" ");
    	 System.out.print(buy[i].num);
    	 System.out.println();
		}
		for(i=0;i<Math.min(salenum,s);i++)
    	 {
    	 
    	 System.out.print(sale[i].type+" ");
    	 System.out.print(sale[i].price+" ");
    	 System.out.print(sale[i].num);
    	 System.out.println();
		}	 


}
}
感觉代码量太大,虽然实现了功能,但是写的比较麻烦,如果大家有更简单的写法,欢迎指教。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值