###Single Number II
参考:https://leetcode.com/problems/single-number-ii/
###問題の内容:
整数配列nums,1つの要素が1回現れる、それ以外、すべての要素が3回現れる、1回現れる1つの要素を除いて
その要素を見つけ、それを返す。
###例:
例1:
Input: nums = [2,2,3,2]
Output: 3
例2:
Input: nums = [0,1,0,1,0,1,99]
Output: 99
###ヒント:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
numsの中、1回だけ現れる要素を除いて、各要素はちょうど3回現れます。
この問題の回答は、2進数変換を使うなら、解決できます。
**var cnt = IntArray(32)**をつくて、nums中の数字を2進数に変換して、入ります。
例1:
Input: nums = [2,2,3,2]
00...10
00...10
00...11
00...10
cntに入れった後、
cntは
00...41
そのあと、mod3を計算して、結果は
00...11,この結果を10進数に変換、結果は3です。
class Solution {
fun singleNumber(nums: IntArray): Int {
var cnt = IntArray(32)
for(num in nums){
for(i in 0 until 32){
if(((num.shr(i)) and 1) == 1){
cnt[i]++
}
}
}
var ans = 0
for(i in 0 until 32){
if((cnt[i] % 3 and 1) == 1){
ans += (1.shl(i))
}
}
return ans
}
}