給定乙個陣列 a
a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。
如:,找出 77。
你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦~
第一行輸入乙個數 n(1≤n≤500)n(
1≤n≤
500)
,代表陣列的長度。
接下來一行輸入 n
n 個 int 範圍內(−2147483648…2147483647−2
1474
8364
8…21
4748
3647
)的整數,表示陣列 a
a。保證輸入的陣列合法。
輸出乙個整數,表示陣列中只出現一次的數。
解題思路:
看到三個數字相同的題,我們不難聯想到兩個數字相同即可用「^」運算解出那個單獨的數,但是我並不了解有三個數的位運算為0的運算子,所以題讓我們自己建立這個運算子。
於是,模擬不難想到:我們可以建立個sum[32]陣列代替2進製,
主要函式: sum[j]+=x>>j&1; //表示將x右移j位,並與「0001」進行與運算,得到他原本二進位制數中從右往左第j+1位數
sum[j]%=3; //將值輸入這個構造的陣列(%3==0說明這個點有三個數了)
ans+=sum[i]《二進位制數中前移b位
#include
#include
#include
#include
using namespace std;
int main()
}for(int i=0;i<32;i++)
printf("%d\n",ans);
}
單獨的數字 位運算
時間限制 1000ms 記憶體限制 65536k 給定乙個陣列 a 除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7 你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 5 00 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2...
計蒜客 單獨的數字(位運算)
給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 輸入格式 第一行輸入乙個數n 1 n 500 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2147483648 2147483647 的...
簡單的演算法問題8 單獨的數字(位運算)
此演算法均是用c 編寫 此題目均是來做計蒜客 給定乙個陣列 a,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 500 代表陣列的長度。接下來一行輸入 n個 int 範圍內 21474...