5G 智慧手機出貨量下滑之際,4G 手機逆勢反彈原因何在?
阿新 • • 發佈:2022-03-17
劍指 Offer 56 - I. 陣列中數字出現的次數
題目
連結
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/
問題描述
一個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。
示例
輸入:nums = [4,1,4,6]
輸出:[1,6] 或 [6,1]
提示
2 <= nums.length <= 10000
思路
首先是全部異或,就可以得到這兩個數字的異或。
之後對於這個值,左移,找到那位1.
然後以這個新的獲取的值進行計算,分為可以與之為1和不可以的,分成兩類。
然後就可以找到這兩類裡面的數。
複雜度分析
時間複雜度 O(n)
空間複雜度 O(1)
程式碼
Java
public int[] singleNumbers(int[] nums) { int x = 0, y = 0, n = 0, m = 1; for (int num : nums) { n ^= num; } while ((n & m) == 0) { m <<= 1; } for (int num : nums) { if ((num & m) != 0) { x ^= num; } else { y ^= num; } } return new int[]{x, y}; }