2015-04-17 24 views
4

在一個只有1和0的數組中,你會如何計數否。 1s和0s進行比較,然後將其修改爲3s和5s的數組。
我的方法是使用累積數組,例如cumulative [i] = array [i] + cumulative [i-1]。 No of one =累計[n]零個數= n-cumulative [n]; 這種方法是否正確?或者建議一些其他方法? 我們可以將它轉換爲3和5的數組而無需比較嗎?計數沒有。 1s和0s沒有比較

+0

使用關聯字典,只需使用數字作爲關鍵字,將字典中的值默認爲新元素的值爲0。 –

+0

該數組是否會包含* 3和5?或者只有0和一個非0號碼?即。 0和3,或者0和5,或者......? –

+0

如何添加所有值並從長度/元素數中減去該值?應該不難看出,在開始時,這種方法不需要爲任意的一對值而改變很多。 – greybeard

回答

2

你的方法是正確的。我也不認爲它可以提高很多 - 畢竟你需要迭代所有的數組元素。

+0

我們可以將它轉換爲3和5的數組而無需比較嗎? –

+3

好吧,你可以做一些'new_array [i] = old_array [i] * 2 + 3'。請注意,這種方法只適用於練習 - 它不會優化任何內容,並且會降低可讀性 –

-1

轉換0-> 3和1> 5,你可以用查找表

const int lookup[]={3,5}; 

forloop { 
    array[i] = lookup[array[i]]; 
} 
3

我認爲你可以做到這一點,而不使用比較依靠的是0在大多數語言視爲False事實和1被視爲True。 例如:C,Python。

因此,不是比較值是0還是1,而是直接使用它作爲條件,並且您應該可以不做比較地完成工作。您可以使用相同的數字來計算10的發生次數。

在Python,這將轉化爲下面的代碼

>>> original_list = [0, 1, 1, 1, 0, 1, 0] 
>>> altered_list = [3 if item else 5 for item in original_list] 
>>> print altered_list 
[5, 3, 3, 3, 5, 3, 5] 
+0

即使它們使用隱式轉換,它們仍然是比較 – sharptooth

1

你必須使用的事實,你只有有1和0,也爲任何項目這是真的,項目加「一個減項目「產生」一個「。如此算各的號,你可以使用:

numOfOnes += item[i]; 
numOfZeroes += (1 - item[i]); 

那麼你的下一個問題是你必須以某種零到5秒和那些轉化爲三分。使用與上述相同的技巧 - 加權總和爲的數字一減去數字,使得它分別產生3s和5s。你必須找出正確的體重值。

肯定沒有比較。作爲獎勵,您可以一次完成所有這些工作 - 轉換價值並在飛行中對它們進行計數。

1

您可以使用計數排序方法技術:創建另一個大小爲2的數組,比如b [2]。然後這樣做:

for(int i=0; i < n; i++) { 
b[a[i]]++; 
} 

最後,B [0]將具有零的數量的計數,和b [1]將具有1秒的數量。

0
//To find the count of 0 & 1 we can do below 
public void findZeroOneCount(int [] arr){ 
     int len=arr.length; 
     System.out.println(len); 
     int sum=0; 
     for(int i=0;i<len;i++){ 
      sum=sum+arr[i]; 
     } 

     System.out.println("Count of Zero:"+(len-sum%len)); 
     System.out.println("Count of One:"+sum%len); 
} 
+1

請在代碼塊之外稍加說明您的解決方案 –