計蒜客 單獨的數字問題

2021-08-18 21:27:15 字數 1165 閱讀 9613

給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。

如:,找出 7

你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦~

第一行輸入乙個數 n(1≤n≤500),代表陣列的長度。

接下來一行輸入 n 個 int 範圍內(−2147483648…2147483647)的整數,表示陣列 a。保證輸入的陣列合法。

輸出乙個整數,表示陣列中只出現一次的數。

4 0 0 0 5

首先這題很容易聯想到另外一題,也是找出單獨的數,不同的是,另外一題中其他數都是出現2次,所以使用異或運算後,對於二進位制每一位,相同的數就被消除了,得到了單獨的數字。但是,這題中其他數字是出現3次的。不過我們還是可以從前面的解法得到啟發,使用二進位制的位運算,既然其他每次數都出現3次,那麼如果針對每一位求和並對3取餘,那麼那些出現3次的數字在這一位的和對3取餘後肯定是0,其實就是單獨的那個數在這一位上的結果。所以,針對32位的整數,我們只要求出二進位制的每一位的和對3取餘,就是單獨的數的二進位制,再轉化成10進製,就是我們需要的答案。

for(int i= 0;i//n表示後面將要迴圈和迭代的次數

}int ans = 0;

for(int i=0;i<32;i++)

c++另外**示例:

#include 

#include

#include

using

namespace

std;

int main()

printf("%d\n", x);}}

設計到c++中的乙個非常重要的知識點,那就是位運算。

其中包括雙目運算: 「&」(按位與)、「|」(按位或)、「^」(按位異或)、「<>」(右移運算)

單目運算:」~」(按位取反)

計蒜客 單獨的數字

給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 輸入格式 第一行輸入乙個數n 1 n 500 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2147483648 2147483647 的...

計蒜客 單獨的數字

給定乙個陣列 a a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 77。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 leq n leq 500 n 1 n 500 代表陣列的長度。接下來一行輸入 n n 個 int 範圍內 2147...

計蒜客 單獨的數字

單獨的數字 給定乙個陣列 aa a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 777。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 500 n 1 leq n leq 500 n 1 n 500 代表陣列的長度。接下來一行輸入 ...