1. 程式人生 > >給定一個整型陣列,找到主元素,它在陣列中的出現次數嚴格大於陣列元素個數的三分之一。

給定一個整型陣列,找到主元素,它在陣列中的出現次數嚴格大於陣列元素個數的三分之一。

class Solution {
public:
    /*
     * @param nums: a list of integers
     * @return: The majority number that occurs more than 1/3
     */
    int majorityNumber(vector<int> &nums) {
        // write your code here
        int len=nums.size();
        if(len==0)
        return -1;
        if(len==1)
        return nums[0];
        if(len==2)
        {
            if(nums[0]=nums[1])
            return nums[0];
            else
            return -1;
        }

//利用散列表(雜湊表)思想解決

       int hash[len];//盛放每個元素在散列表中位置的陣列
        for(int i=0;i<len;i++)
        {
            hash[nums[i]%len]=0;//每個位置處剛開始為0,具有相同值的元素放在同一個位置
        }
        for(int i=0;i<len;i++)
        {
            hash[nums[i]%len]++;
        }
        int x=len/3+1;
        for(int i=0;i<len;i++)
        {
            if(hash[nums[i]%len]>=x)//判斷某個位置處的元素數是否超過了三分之一
            return nums[i];
        }
        return -1;
    }
};