notes/OJ notes/pages/Leetcode Single-Number.md
2022-07-22 16:03:37 +08:00

1.6 KiB

Leetcode Single-Number

2022-07-22 15:31

Algorithms:

#algorithm #bit_manipulation

Data structures:

#DS #bitset

Difficulty:

#coding_problem #difficulty-easy

Additional tags:

#leetcode

Revisions:

N/A

tag:#bit_manipulation

Problem

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

You must implement a solution with a linear runtime complexity and use only constant extra space.

Examples

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

Constraints

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • Each element in the array appears twice except for one element which appears only once.

Thoughts

[!summary] This is a #bit_manipulation problem utilizing the XOR operator

The XOR operator has some properties:

a ^ a = 0;
a ^ b ^ a = a ^ a ^ b = b;

This can be used for our problem.

Solution

class Solution {
public:
  int singleNumber(vector<int> &nums) {
    // Using XOR operator
    int ans = 0;

    for (int i : nums) {
      ans ^= i;
    }

    return ans;
  }
};