加強版水王 找出出現次數剛好是一半的數字

2021-09-22 19:23:00 字數 527 閱讀 8270

因為,很明顯,如果是剛好出現一半的話,如此例: 0,1,2,1 :

方案一:

根據上面的例子,最後我們可能會輸出不是符合條件的數字,那麼仔細分析的話,佔一半的數字,只能在兩個變數**現:candidate和arr[n-1]。如果arr[n-1]不是佔一半的資料key,那麼candidate最後保持著key,另一種情況,就是arr[n-1]為key。我們遍歷到最後,再遍歷一趟判斷一下是否arr[n-1]佔據一半即可。

改進:我們再遍歷的過程中,讓每乙個資料與arr[n-1]比較,統計和arr[n-1]相同的資料,那麼到最後就不用再遍歷了,**如下:

int morethanhalf(int a, int

n)

else

} if((sum1+1) == n/2

)

return a[n-1

];

else

return

candidate;

}

找出陣列出現次數超過一半的數

例如 陣列中1出現了5次超過長度9的一半。因此輸出1 注 這裡沒有考慮出現次數最多的數字是0的情況,關鍵在於方法 這裡給出兩種常用方法 這種演算法優點在於理解起來比較容易,如果乙個數出現次數超過長度的一半,那將陣列排序之後位於陣列中間位置的數一定就是要找到的數。注 需要檢測一下中間的數是否是超過一半...

找出陣列中出現次數超過一半的數

分析 最直接的方法,對陣列中所有的數排序,然後再掃瞄一遍,統計各個數出現的次數。如果某個數出現的次數超過一半,則輸出這個數。演算法的時間複雜度是o n log 2n n 如果每次刪除兩個不同的數,那麼,在剩下的數字裡,超過一半的數的個數一樣超過了50 不斷重複這個過程,最後剩下的即 為所求。無需避免...

演算法 找出陣列中出現次數超過一半的數

演算法 找出陣列中出現次數超過一半的數 每當我看到經典的演算法題,就懷念高中,感覺很多演算法題就是高中的題目,誰叫哥唯讀了個專科,高數基本相當沒學。有空要看看高數啊,想當年數學那是相當的.方法一 第乙個想到的方法是見乙個二維陣列,一維存陣列中的資料,二維存這個數出現的次數。出現次數最多的那個數就是要...