剑指offer算法题028:数组中出现次数超过一半的数字
小編在求職找找工作期間劍指offer上的算法題刷了很多遍,并且每道題小編當時都總結了一種最適合面試時手撕算法的最優解法。考慮到劍指offer算法題在面試中的高頻出現,小編每天和大家分享一道劍指offer上的算法題,以及小編總結的答案。下面是第028道劍指offer算法題:
題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度為9的數組{1,2,3,2,2,2,5,4,2}。由于數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
分析
比較有意思的一道題,面試中確實也有多次出現。這道題的關鍵是一個數字出現的次數大于充足長度的一半,換個角度看:如果存在這么個數字,這個數的計數次數減去其他和這個數不相等數字的計數次數后,最后的結果依舊大于0,這個是本題的解題思路的核心。
public class Solution {public int MoreThanHalfNum_Solution(int [] array) {int curNum = array[0];int count = 1;for(int i=1;i<array.length;i++){if(array[i]==curNum)count++;elsecount--;if(count<0){count = 1;curNum = array[i];}}//如果存在這個數,那么這個數一定是curNum,并且count>0if(count<=0) return 0;int res = 0;for(int i=0;i<array.length;i++){if(array[i]==curNum)res++;}return res>(array.length)/2?curNum:0;} }注:在牛客網上刷劍指offer題目時,最好使用牛客網自帶的編輯器,不建議使用IDE的代碼補全功能,因為實際面試中是在A4紙上手寫代碼,是沒有代碼提示的。
有些題你看懂了,不代表你會了。看答案前或者看完答案第二天,動手在A4紙上寫寫代碼就知道自己是不是真的會了。
每天分享一道劍指offer算法題目,并且有最適合面試手撕算法環節的解法分享,歡迎大家關注我們~
其他文章
1. 學習筆記和學習資料匯總:前端 + 后端 + java + 大數據 + python + 100多實戰項目 + C++
2. 我的秋招經歷總結:一站式秋招規劃
3. 零基礎學爬蟲
4. 零基礎C++學習總結
歡迎關注個人公眾號【菜鳥名企夢】,公眾號專注:互聯網求職面經、java、python、爬蟲、大數據等技術分享:
公眾號菜鳥名企夢后臺發送“csdn”即可免費領取【csdn】和【百度文庫】下載服務;
公眾號菜鳥名企夢后臺發送“資料”:即可領取5T精品學習資料、java面試考點和java面經總結,以及幾十個java、大數據項目,資料很全,你想找的幾乎都有
總結
以上是生活随笔為你收集整理的剑指offer算法题028:数组中出现次数超过一半的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前后端分离API接口如何加密 —— AE
- 下一篇: 小宝宝-搞怪