TCO2012Round1A-1-EllysJuice


题目大意:
     一群人轮流喝两瓶饮料,分别是苹果汁和橙汁。每轮由一个人来喝,从第0轮开始算,偶数轮喝苹果汁,奇数轮喝橙汁,每轮喝掉对应饮料的一半。最终唯一一个喝的最多的人取胜,如果喝得最多的有多个人则无人取胜。给定String[] players表示每轮喝果汁的人名,但是顺序是打乱的,每个人都有可能喝多次。返回所有有可能取胜的人名,按单词升序排列。
     
思路:
     首先需要分析取胜的条件:
  • 如果某人的名字只出现了一次,那么最多只能喝半瓶饮料(如苹果汁)。这时候如果还有其他人,那么必有一人也喝了半瓶饮料(橙汁)。所以这种情况下,当参赛者只有这么一个人时才会取胜,即players中只有一个人名。
  • 如果某人的名字只出现了两次,那么只要分别喝一半的苹果汁和橙汁就喝掉全部饮料的一半,必然取胜。
     所以解题的依据是,如果players中只有一个人,则返回这个人,否则返回所有出现次数>=2的人(排序后)。



java代码:

public class EllysJuice
{
       public String[] getWinners(String[] players)
      {
            Map<String, Integer> count = new HashMap<String, Integer>();
             for (int i = 0; i < players. length; ++i){
                   if (count.containsKey(players[i])){
                      count.put(players[i], count.get(players[i]) + 1);
                  } else {
                      count.put(players[i], 1);
                  }
            }
            ArrayList<String> result = new ArrayList<String>();
             for (Map.Entry<String, Integer> en : count.entrySet()){
                if (en.getValue().intValue() >= 2){
                    result.add(en.getKey());
                }
            }
             if (result.size() == 0){
                if (count.size() != 1){
                return new String[0];
            } else {
                result.add(players[0]);
            }
            }
            String[] res = result.toArray( new String[0]);
            Arrays. sort(res);
             return res;
      }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值