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

2021-09-25 01:30:33 字數 680 閱讀 1775

028陣列**現次數超過一半的陣列

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

方法:map統計法

思路:遍歷陣列,用map來記錄每個數出現的次數,最後再遍歷map查詢是否有數超過陣列的一半

eg:map的遍歷方式很重要

**:

public int morethanhalfnum_solution(int  array) 

}return 0;

}

map遍歷的簡單兩個方法:

方法一:在for迴圈中使用entries實現map的遍歷

/*** 最常見也是大多數情況下用的最多的,一般在鍵值對都需要使用

*/map map = new hashmap();

map.put("熊大", "棕色");

map.put("熊二", "黃色");

for(map.entryentry : map.entryset())

方法二:通過iterator遍歷

iterator> entries = map.entryset().iterator();

while(entries.hasnext())

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

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

由排序陣列可以想到使用二分查詢法先查找到乙個待查的數字,然後再確定該數字第一次出現的位置和最後一次出現的位置,相減即可得到該數字在排序陣列中出現的次數。該方法的時間複雜度為o logn k第一次出現的下標 int getfirstk vector data,int lo,int hi,int k e...