一道笔试题。
最近笔试碰到的,和 LeetCode 中的《只出现一次的数字》类似,但是又很不一样。
题目
对于一串数字,有的只出现一次,有的会出现多次,请输出只出现了一次的数字。如果没有只出现了一次的数字,则输出 “empty”。
输入
一行数字,空格分隔。
1 2 1 3 5 6 3 4
数字范围:-1 000 000 到 1 000 000 之间
输出
一行数字,空格分隔。要求按照输入顺序输出。
示例
示例1
输入:1 2 1 3 5 6 3 4
输出:2 5 6 4
示例2
输入:1 1 1 1
输出:empty
分析
这个问题和数组去重问题类似,但是还不一样。因为去重是要求多份相同数据只保留一份。但是本题是如果有重复的就一份也不保留。
可以使用 HashMap 进行计数。也可以考虑使用数组进行统计,但是使用数组的缺点是要根据数据的取值范围来设定数组的大小,而不是数据的输入规模来设定数组的大小,可能会非常浪费空间。
解答1[Java]:
核心思路
因为要求按照输入顺序输入,所以选择了 LinkedHashMap
进行计数和输出。
代码
1 | import java.util.*; |
解答2[Java]:
1 |