劍指offer:陣列中出現次數超過陣列長度一半的數。
阿新 • • 發佈:2019-02-20
題目描述:
陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為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;
}
};