用Python找出数组中出现次数超过一半的数
生活随笔
收集整理的這篇文章主要介紹了
用Python找出数组中出现次数超过一半的数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。
計數+比較
不考慮效率,采用最簡單的辦法,遍歷數組,使用 List 的 count() 方法統計元素出現的次數:
def more_than_half_num(arr):half = len(arr) // 2for i in arr:if arr.count(i) > half:return ireturn None構造一個map,key為元素的值,value為元素出現的次數,然后遍歷map找到目標元素:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def more_than_half_num(arr):dict = {}for i in arr:if i in dict:dict[i] += 1else:dict[i] = 1half = len(arr) // 2for k, v in dict.items():if v > half:return kreturn None排序+中位數
數組排序后,如果符合條件的數存在,則一定是數組中間那個數??墒褂门判蛩惴▽到M進行排序,然后求排序后數組的中間數 + 判斷中間數出現次數是否超過數組的一半。下面以快速排序為例:
def part_sort(arr, left, right):key = rightwhile left < right:while left < right and arr[left] <= arr[key]:left += 1while left < right and arr[right] >= arr[key]:right -= 1arr[left], arr[right] = arr[right], arr[left]print(arr)arr[left], arr[key] = arr[key], arr[left]return left def quick_sort(arr, left, right):if left >= right:returnindex = part_sort(arr, left, right)quick_sort(arr, left, index - 1)quick_sort(arr, index, right) def more_than_half_num(arr):length = len(arr)quick_sort(arr, 0, length - 1)res = arr[length // 2]if arr.count(res) > length // 2:return reselse:return None一次遍歷
數組中有一個數字出現的次數超過數組長度的一半,也就是說出現的次數比其他所有數字出現次數的和還要多。因此我們可以考慮在遍歷數組的時候利用兩個輔助變量,一個記錄數字出現的次數,一個記錄數字。
- 當我們遍歷到下一個數字的時候,如果下一個數字和我們之前保存的數字相同,則次數加1;
- 如果下一個數字和我們之前保存的數字不同,則次數減1。
- 如果次數為零,我們需要保存下一個數字,并把次數設為1。
總結
以上是生活随笔為你收集整理的用Python找出数组中出现次数超过一半的数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3反转列表的三种方式
- 下一篇: Python 命令行之旅:深入 clic