All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0201_0300.s0260_single_number_iii.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0201_0300.s0260_single_number_iii;

// #Medium #Array #Bit_Manipulation #2022_07_05_Time_1_ms_(100.00%)_Space_44.5_MB_(77.86%)

/**
 * 260 - Single Number III\.
 *
 * Medium
 *
 * Given an integer array `nums`, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once. You can return the answer in **any order**.
 *
 * You must write an algorithm that runs in linear runtime complexity and uses only constant extra space.
 *
 * **Example 1:**
 *
 * **Input:** nums = [1,2,1,3,2,5]
 *
 * **Output:** [3,5] **Explanation: ** [5, 3] is also a valid answer. 
 *
 * **Example 2:**
 *
 * **Input:** nums = [-1,0]
 *
 * **Output:** [-1,0] 
 *
 * **Example 3:**
 *
 * **Input:** nums = [0,1]
 *
 * **Output:** [1,0] 
 *
 * **Constraints:**
 *
 * *   2 <= nums.length <= 3 * 104
 * *   -231 <= nums[i] <= 231 - 1
 * *   Each integer in `nums` will appear twice, only two integers will appear once.
**/
public class Solution {
    public int[] singleNumber(int[] nums) {
        int xorSum = 0;
        for (int num : nums) {
            // will give xor of required nos
            xorSum ^= num;
        }
        // find rightmost bit which is set
        int rightBit = xorSum & -xorSum;
        int a = 0;
        for (int num : nums) {
            // xor only those number whose rightmost bit is set
            if ((num & rightBit) != 0) {
                a ^= num;
            }
        }
        return new int[] {a, a ^ xorSum};
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy