【20190326】【每天一道演算法題】求眾數(分治演算法)
問題:
給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋
的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
我的思路及程式碼:
/* 思路:分治演算法
*
* 邏輯:Step1:去重,將不重複的元素放在另外一個陣列(nums_tmp)中;
* Step2:遍歷原始陣列,算出nums_tmp中各個元素在nums出現的次數,如果滿足眾數的條件,那麼
* 返回該元素
*/
int majorityElement(int* nums, int numsSize)
{
int *p1 = nums;
int *p2 = NULL;
int j=1;
int nums_tmp[128] = {0};
nums_tmp[0] = nums[0];
for(int i = 0; i < numsSize-1; i++)
{
p2 = p1 + i;
while(*p2 != *p1)
{
nums_tmp[j++] = *p2;
}
}
int len2 = sizeof(nums_tmp)/sizeof(nums_tmp[0]);
int Num[50] = {0};
for(int i =0; i < len2; i++)
{
Num[i]++;
for(int j = 0; j < numsSize; j++)
{
while(nums[j] == nums_tmp[i])
Num[i]++;
if(Num[i] > numsSize/2)
return nums_tmp[i];
}
}
}
相關文章
- 分治演算法-眾數問題演算法
- 演算法題:求眾數演算法
- 每天一道演算法題:顛倒整數演算法
- 每天一道演算法題:求兩個排序陣列的中位數演算法排序陣列
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- LeetCode169求眾數——分治LeetCode
- 演算法:Majority Element(求眾數)演算法
- 【演算法】求眾數-js解法演算法JS
- 演算法面試題彙總_2求眾數演算法面試題
- LeetCode演算法簡單題--JavaScript(每天一道題)LeetCode演算法JavaScript
- 每天一道演算法題:Z字形轉換演算法
- 每天一道演算法題系列十三之羅馬數字轉整數演算法
- 【演算法】已知必存在眾數,求該眾數 -- Boyer-Moore 投票演算法演算法
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- 每天一道演算法題(將數拆分成斐波那契序列)演算法
- 每天一道演算法題:最長迴文子串演算法
- 每天一道演算法題--排序之桶排序實現求排序後相鄰最大差值問題演算法排序
- 一道演算法題演算法
- 分治演算法演算法
- 求眾數、排序演算法、二分法排序演算法
- 一道前端演算法題前端演算法
- 每天一道演算法題:無重複字元的最長子串演算法字元
- 每日一道演算法題:1.兩數之和演算法
- 分治法求眾數和重數(含檔案輸入輸出)
- Leetcode刷題——求眾數LeetCode
- 一道演算法題的分析演算法
- 分治演算法-求解棋盤覆蓋問題演算法
- 每日一道演算法:迴文數演算法
- 每日一道演算法, 《兩數之和》演算法
- 「每日一道演算法題」Reverse Integer演算法
- 【演算法練習】(8)眾數演算法
- 分治演算法-骨牌鋪方格演算法
- 演算法學習-CDQ分治演算法
- [演算法] 一些分治演算法
- 每日一道演算法:整數反轉演算法
- 使用 AI 解決一道演算法題AI演算法
- 演算法精講:分享一道值得分享的演算法題演算法
- 求眾數