题目描述:
小明是个马大哈,某天他到超市买了若干双筷子(n<20)筷子的长度不尽相同,他把全部筷子都放在购物袋里面拿回家,路上不小心漏了一根
请你用程序帮他找出是漏掉的筷子是多长的。
输入: 剩下的筷子数组,如:1, 2, 3, 2, 1, 3, 2
返回值:漏掉的筷子长度,如上述输入返回:2(当输入的筷子数据异常时返回-1,如:找不到漏掉的筷子)
解题思路:使用HashMap对筷子的种类与数量进行键值对匹配存储,当出现重复筷子时,对应的筷子数量+1,然后遍历一次HashMap,获取筷子的数量,
如果是奇数则为漏掉的筷子。
代码如下:
public class xiaoming_kuaizi
{
/**
* @param args
*/
public static void main(String[] args)
{
int[] chopsticks={1,2,3,2,1,3,2};
System.out.println(checkChopsticks(chopsticks));
}
/**
* 小明是个马大哈,某天他到超市买了若干双筷子(n<20)
* 筷子的长度不尽相同,他把全部筷子都放在购物袋里面拿回家,路上不小心漏了一根
* 请你用程序帮他找出是漏掉的筷子是多长的。
*
*
* @param chopsticks 剩下的筷子数组,如:1, 2, 3, 2, 1, 3, 2
* @return int 漏掉的筷子长度,如上述输入返回:2(当输入的筷子数据异常时返回-1,如:找不到漏掉的筷子)
*
*/
public static int checkChopsticks(int[] chopsticks)
{
Map<Integer,Integer> hm=new HashMap<Integer,Integer>();
int count=0;
for (int i = 0; i < chopsticks.length; i++)
{
if (hm.containsKey(chopsticks[i]))
{
count=hm.get(chopsticks[i])+1;
}
else
{
count=1;
}
hm.put(chopsticks[i], count);
}
for (int i = 0; i < chopsticks.length; i++)
{
if (hm.get(chopsticks[i])%2==0)
{
continue;
}
else if (hm.get(chopsticks[i])%2!=0)
{
return chopsticks[i];
}
}
return -1;
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zzc8265020/article/details/46858607