劍指offer第39 陣列中出現次數超過一半的數字

2021-08-21 08:58:49 字數 591 閱讀 5781

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

# -*- coding:utf-8 -*-

classsolution:

defmorethanhalfnum_solution(self

, numbers):

# write code here

dict={}

fornoinnumbers:

if notdict.has_key(no):

dict[no]=1

else:

dict[no]+=1

ifdict[no]>len(numbers)/2:

returnno

return0

利用字典儲存數字出現的次數。

劍指offer39 陣列中出現次數超過一半的數字

先對陣列排序,然後取中位數,那個中位數肯定是超過一半的數字。採用快速排序時間複雜度為o nlogn 取中位數o n 基於partition函式的時間複雜度為o n 的演算法。這種演算法受快速排序演算法的啟發。在隨機快速排序演算法中,現在陣列中隨機選擇乙個 數字,然後調整陣列中數字的順序,使得比選中的...

劍指offer 39 陣列中出現超過一半的數

這道題的題目為 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。解題思路分為三步 1 對陣列進行排序,排序之後位於中間的那個數字就是出現的次數超過陣列長度的一半的數。2 使用partition演算法對陣列進行排序,使得排序後隨機選取的數字的左邊數都小於它,右邊都大於它。如果選中的數字下...

劍指offer 陣列在排序陣列中出現的次數

記錄次數,直接用data.count k 也通過了。或者常規演算法,出現有序用二分查詢。class solution def getnumberofk self,data,k write code here if len data 0 return 0 count 0 low 0 high len ...