【20190326】【每天一道演算法題】求眾數(分治演算法)

Satisfying發表於2019-03-27

問題:

給定一個大小為 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ 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];
        }
    }
}

 

相關文章