c語言中如何快速的計算僅含有01元素的陣列中1的個數?

時間 2021-06-02 04:20:19

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...