1. 程式人生 > >百度面試題:找出陣列中出現次數超過一半的數

百度面試題:找出陣列中出現次數超過一半的數

現在有一個數組,已知一個數出現的次數超過了一半,請用O(n)的複雜度的演算法找出這個數。
Thinking……/>

/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> 答案/>: 
建立一個hash_map,key為陣列中的數,value為此數出現的次數。遍歷一遍陣列,用hash_map統計每個數出現的次數,並用兩個值儲存目前出現次數最多的數和對應出現的次數。 
這樣可以做到O(n)的時間複雜度和O(n)的空間複雜度,滿足題目的要求。 
但是沒有利用“一個數出現的次數超過了一半”這個特點。也許演算法還有提高的空間。答案2: 
使用兩個變數A和B,其中A儲存某個陣列中的數,B用來計數。開始時將B初始化為0。 
遍歷陣列,如果B=0,則令A等於當前數,令B等於1;如果當前數與A相同,則B=B+1;如果當前數與A不同,則令B=B-1。遍歷結束時,A中的數就是要找的數。 
這個演算法的時間複雜度是O(n),空間複雜度為O(1)。/>