leetcode刷题笔记一百三十六题与一百三十七题 只出现一次的数字与只出现一次的数字II
leetcode刷题笔记一百三十六题与一百三十七题 只出现一次的数字与只出现一次的数字II
源地址:
问题描述:
136题问题描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:输入: [4,1,2,1,2]
输出: 4137题问题描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2]
输出: 3
示例 2:输入: [0,1,0,1,0,1,99]
输出: 99
//136题与137题区别在于 136题的重复元素只重复两次, 137题的重复元素会重复三次
//这造成的影响在于本题的主要解法基于位运算中的异或,只是用单个变量进行异或,很难区别三次重复与单次重复,需要引入第二个变量
//136题
object Solution {
def singleNumber(nums: Array[Int]): Int = {
var single = 0
for (num <- nums) single ^= num
return single
}
}
//137题
//重复K次,依次类推,需要引入K个变量
object Solution {
def singleNumber(nums: Array[Int]): Int = {
var once = 0
var twice = 0
for (num <- nums){
once = ~twice & (once^num)
twice = ~once & (twice^num)
}
return once
}
}