題目描述:
陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0
思路:方法一:如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。
在遍歷陣列時儲存兩個值:一是陣列中乙個數字,一是次數。
遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;
若次數為0,則儲存下乙個數字,
並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它是否符合條件即可。
時間複雜度為(n),空間複雜度o(1)
方法二:建立乙個hash_map,key為陣列中的數,value為此數出現的次數。遍歷一遍陣列,用hash_map統計每個數出現的次數,並用兩個值儲存目前出現次數最多的數和對應出現的次數。
這樣可以做到o(n)的時間複雜度和o(n)的空間複雜度
方法一**是我在牛客網oj環境下編譯通過的:
方法二**:
過後附上
陣列中出現次數超過一半的數字
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...
陣列中出現次數超過一半的數字
陣列中出現次數超過一半的數字 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。class solution count 0 for auto i numbers if i k ...
陣列中出現次數超過一半的數字
題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解題思路 將陣列按大小排序,若存在數字出現次數超過陣列長度的一般,則陣列中位數必定為該數字 1 將陣列排序完成後,取a...