1樓:
1. 如果數字是存在陣列裡的,不論如何都需要遍歷一遍,複雜度O(n),只能在常數上優化。
2. 沒看懂題主為什麼要先sort一下…sort可是O(nlgn)的,而且既然都sort了,那麼比如第乙個1出現在位置k上,顯然1的個數是length - k
3. 沒看懂既然樓主用的是求和的方法為什麼還要去判斷==0,直接加起來不就好了。
2樓:一粟紅塵
如果你能把這個陣列存在乙個int裡面的話,可以這麼算int a = 22; //10110
int cnt = 0;
for(int x = a; x; x ^= x & (-x)) cnt++;
cout << cnt;
陣列長度大於32可以用long long,或者int陣列。x&(-x)可以得到最小位的1,如果x是10110(22),那麼x&(-x)就是00010,做乙個xor運算就能去掉最小位的1,也就是10100。迴圈語句每次可以去掉最後乙個1。
時間複雜度O(n), n為這個數中1的個數。
3樓:任衛
GPU上開執行緒算吧
樓主是有乙個陣列的陣列,對吧? 外面這個大陣列裡的小陣列的個數非常大,而小陣列裡的數的個數並不大。對吧。
GPU上可以同時跑上千計算執行緒。其實要是小陣列的數的個數更多點兒,那GPU更有優勢啦,歸併那可不是鬧著玩的。thrust::
count 函式直接歸併數指定值的個數。 小陣列體現不了歸併的威力,那沒關係,GPU計算執行緒多足夠滿足個數巨大的小陣列那個要求。
如何理解C語言中的識別符號?
Milo Yip 識別符號 cppreference.com識別符號能指代下列型別的實體 物件函式 標籤 struct union 或列舉 結構體或聯合體成員 列舉常量 typedef 名 標號名巨集名 巨集形參名 就是程式設計師可以命名一些東西,不要想得太複雜。 chenc 讀書是為了獲取知識,獲...
如何快速學好c語言的程式設計?
The One 建議從實踐出發,比如現在就去用C語言寫乙個桌面程式,你就會去了解寫乙個桌面程式具體需要用到哪些東西,哪些函式庫,不需要按著教材上的順序學,把你的想法變成實際,如果沒有想法就去模仿一些簡單的專案做個demo來完善自己的skills,你真正應該掌握的不是C語言,而是學習能力和解決問題的能...
C 語言中,如何刪除單鏈表中的節點?
zet struct Node void removeValue Node list,int val 測試 int main int argc,char argvNode myNode1 Node node1 myNode1 node1 val 1 Node myNode2 Node node2 m...