LeetCodeに毎日挑戦してみた 136. Single Number(Python、Go)


Leetcodeとは

leetcode.com
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

31問目(問題125)

136. Single Number

問題内容

Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?

日本語訳

整数の空でない配列が与えられると、1つを除いてnumsすべての要素が2回表示されます。その単一のものを見つけます。

フォローアップ: 追加のメモリを使用せずに、実行時の複雑さが線形のソリューションを実装できますか?

Example 1:

Input: nums = [2,2,1]
Output: 1

Example 2:

Input: nums = [4,1,2,1,2]
Output: 4

Example 3:

Input: nums = [1]
Output: 1

考え方

  1. ビット演算を用います
  2. 論理的XORを使って重複するものがあったら0、無かったら1を返すようにします
  3. 最終的に一つしかない数字が返されます

解答コード

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        result = 0
        for n in nums:
            result ^= n
        return result
  • Goでも書いてみます!
func singleNumber(nums []int) int {
    result := 0
    for _, v := range nums {
        result = result ^ v
    }
    return result
}