From c66b1879eb7b6887d1195748c94d92abfae0e463 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 31 May 2024 12:16:00 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB260.=20Single=20Number=20III?= =?UTF-8?q?=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/single-number-iii.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 go/single-number-iii.go diff --git a/go/single-number-iii.go b/go/single-number-iii.go new file mode 100644 index 0000000..f365fe4 --- /dev/null +++ b/go/single-number-iii.go @@ -0,0 +1,33 @@ +package single_number_iii + +func singleNumber(nums []int) []int { + reduce := func() int { + xor := 0 + for _, x := range nums { + xor ^= x + } + return xor + } + xor := reduce() + + findMask := func() int { + mask := 1 + for (xor & mask) == 0 { + mask <<= 1 + } + return mask + } + mask := findMask() + + a := 0 + b := 0 + for _, x := range nums { + if (x & mask) != 0 { + a ^= x + } else { + b ^= x + } + } + + return []int{a, b} +}