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

2021-07-02 07:03:43 字數 703 閱讀 4894

陣列中有乙個數字出現的次數超過陣列長度的一半,找出這個數字。

1、基於partition函式的o(n)的解法(找到下標為n/2的數)。

2、根據陣列特點找出o(n)的演算法。

#includeusing namespace std;

//功能:求陣列中出現次數超過一半的數字

//思路1:利用快速排序可以求出第k大的數,如果存在要求的數,那麼排序後他的下標一定在n/2

int partition(int *numbers , int begin , int end)

} swap(numbers[begin] , numbers[j]);

return j;

}int morethanhalfnumhht(int *numbers , int length)

else

}return numbers[middle];

}int morethanhalfnum(int *numbers , int length)

else

if(numbers[i] == result)

times++;

else

times--;

} return result;

}int main()

; int length = sizeof(numbers) / sizeof(*numbers);

cout<

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