【演算法解題報告】求眾數
問題分類:
1、只需要求出一列數的眾數,不考慮多個眾數的情況;
2、考慮多個眾數,只需要輸出一個;
3、如果有多個眾數,則由小到大輸出,並且輸出個數。
簡單情況
(陣列已經分類)
//忽略命名和風格,程式碼來自http://bbs.csdn.net/topics/330219507
int find_max_seq(int *a, int n)
{
int i, elem;
int count = 1, count1 = 1;
for(i = 0; i < n-1; )
{
while(a[i]==a[i+1])
{
count++;
i++;
}//統計
if(count > count1)
{
count1 = count;
elem = a[i];
}//迭代
count = 1;
i++;
}
return elem;
}
基本思路:迭代
資料:計數器、最大計數器
不用統計眾數數目的情況
/在有序陣列中查詢出現最多的元素/
int find_max_seq(int *a, int n, int *p, int *index)
{
//int i, elem;
int i;
int count = 1, count1 = 1;
int flag = 1; /陣列不存在相同的元素標誌/
*index = 0;
for(i = 0; i < n-1; ) {
while(a[i]==a[i+1]) {
count++;
i++;
flag = 0; /陣列存在相同的元素標誌/
}
if(count > count1) {
count1 = count;
//elem = a[i];
*index = 0;
p[*index] = a[i];
(*index)++;
}
else if(count == count1) {
p[*index] = a[i];
(*index)++;
}
count = 1;
i++;
}
if(flag) {
*index = 0;
for(i = 0; i < n; i++) {
p[*index] = a[i];
(*index)++;
}
}
//return elem;
return 0;
}
最複雜情況
int mynspace :: mode(int array[], int n)
{
sort(array, array + n);
int frequency[100] = {0};
for(int i = 0; i < n; i++)
frequency[array[i]]++;
int maxFrequency = maxNum(frequency, 100);
int modeCounter = 0;
for(int j = 0; j < 100; j++)
{
if(frequency[j] == maxFrequency && maxFrequency != 1 && maxFrequency != 0)
{
cout << j << ” ” << frequency[j] << endl;
modeCounter++;
}
}
return modeCounter;
}
利用的提供的額外條件 所有數字小於100
所以構造一個size為100的陣列,用來統計每個數字出現的次數;
maxFrequence是出現的最大頻率,這樣不論有多少個眾數,只要滿足條件frequensy等於maxFrequency,它就是眾數。
思路很簡單,但開銷相對較大。
by dukeyunz
相關文章
- 演算法題:求眾數演算法
- 演算法面試題彙總_2求眾數演算法面試題
- 【演算法】求眾數-js解法演算法JS
- 演算法:Majority Element(求眾數)演算法
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- 【演算法】已知必存在眾數,求該眾數 -- Boyer-Moore 投票演算法演算法
- Leetcode刷題——求眾數LeetCode
- 分治演算法-眾數問題演算法
- 求眾數、排序演算法、二分法排序演算法
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- 【leetcode】求眾數LeetCode
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- [熵值] 解題報告熵
- 演算法設計--眾數和重數問題(分治法)演算法
- 找眾數演算法演算法
- c++實現求眾數及其重數C++
- ARC173 解題報告
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- 【LeetCode】求眾數(四種方法)LeetCode
- ACM 眾數問題ACM
- 眾數問題分析
- 求素數(質數)演算法演算法
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- 【演算法練習】(8)眾數演算法
- 演算法之絕對眾數演算法
- LeetCode169求眾數——分治LeetCode
- 一個小小的演算法題:求兩數之和演算法
- 報告:公眾是如何看待AI的AI
- CF720B 解題報告
- P10499 解題報告
- P11188 解題報告
- SP30906 解題報告
- 分治法求眾數和重數(含檔案輸入輸出)
- 求取眾數及重數的演算法實現(Java)演算法Java
- Leetcode 第136場周賽解題報告LeetCode
- 豐田汽車問題解決方法(A3報告)
- LeetCode Weekly Contest 96 解題報告LeetCode
- 11.1NOIP模擬賽解題報告