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

2021-08-09 03:55:49 字數 541 閱讀 5506

題目描述:

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

思路:利用陣列本身的特性,

如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。

在遍歷陣列時儲存兩個值:一是陣列中乙個數字,一是次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它是否符合條件即可。

**:

public class solution 

int result=array[0];

int times=1;

for(int i=1;ilength/2)else

}}

第二種想法,利用快速排序的過程

public class solution

array[low] = array[high];

while(low

劍指offer二十八之陣列中出現次數超過一半的數字

一 題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。二 思路 解法一 陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。比如 1,2,2,2,3 或2,2,2,3,...

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

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

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