1. 程式人生 > >劍指offer:陣列中出現次數超過陣列長度一半的數。

劍指offer:陣列中出現次數超過陣列長度一半的數。

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

題目分析:
這個題和統計字串中出現了n次的字元的題,思路是相同的,統計出數字出現的次數,然後和陣列大小的一半比較就可以。
我使用了一個map將陣列中的所有不同的元素都管理起來,然後遍歷這個map,將每一個節點的值與陣列的所有元素相比較,如果相同,則將map的value值加一。每次統計完每一個節點的值,就將這個節點的value值與陣列大小的一半進行比較,找出value大於陣列大小的一半的值即可。

程式碼:

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        map<int, int> m;
        int count = 0;
        for (size_t i = 0; i<numbers.size(); i++)
        {
            m[numbers[i]] = count;
            //m.insert(pair<int, int>(numbers[i], count++));
} map<int, int>::iterator it = m.begin(); while (it != m.end()) { for (size_t i = 0; i < numbers.size(); i++) { if (it->first == numbers[i]) { ++it->second; } } if
(it->second>numbers.size() / 2) { return it->first; } it++; } return 0; } };