LeetCode日本語修行17日目- [137-一回だけ現れった数字II]
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
}
}
Author And Source
この問題について(LeetCode日本語修行17日目- [137-一回だけ現れった数字II]), 我々は、より多くの情報をここで見つけました https://qiita.com/Aethey/items/24294934f932f31a5a13著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .