Leetcode136. 只出现一次的数字
题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
题解:
方法一:额外定义hashMap方法,map的key,value分别是元素以及元素对应出现的次数,当遍历数组之后,次数为1的key即为要找的元素。
方法二:使用异或方法
a
,
b
a,b
a,b两个值按位异或运算,相同为0,不同为1
scala代码如下:
def singleNumber(nums: Array[Int]): Int = {
val map = new mutable.HashMap[Int, Int]()
var result = -1
for (i <- nums) {
var count: Int = map.getOrElse(i, 0)
count = count + 1
map.put(i, count)
}
val keys: Set[Int] = map.keySet.toSet
for (i <- keys) {
val count = map.getOrElse(i, 0)
if (count == 1) {
result = i
}
}
result
}
/**
* 异或方法
*
* @param nums
* @return
*/
def singleNumber2(nums: Array[Int]): Int = {
var result = nums(0)
for (i <- 1 until nums.length) {
result = result ^ nums(i)
}
result
}