Leetcode 求众数

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例 1:

输入: [3,2,3]
输出: 3

示例 2:

输入: [2,2,1,1,1,2,2]
输出: 2

 

O(n2),先排序,再比较.

int cmpfunc(const void * a, const void * b) {
    return *(int *)a - *(int *)b;
}

int majorityElement(int *nums, int numsSize) {

    int i;
    short count;
    int ret;
    qsort(nums,numsSize,sizeof(int),cmpfunc);

    count = 1;
    ret = nums[0];

    for(i = 1; i < numsSize; i++)
        if(ret == nums[i]) {
            count++;
        } else if(count > numsSize/2) {
            return ret;
        } else {
            count = 1;
            ret = nums[i];
        }

    return ret;
}

 

法2

int cmpfunc(const void * a, const void * b) {
    return *(int *)a - *(int *)b;
}
 
int majorityElement(int *nums, int numsSize) {
 
    qsort(nums,numsSize,sizeof(int),cmpfunc);
    return nums[numsSize/2];
}

 

法3
因为题意假设这个数一定存在,所以这个数出现的次数大于其他所有数的和。

int majorityElement(int *nums, int numsSize) {

    int i;
    short count = 1;
    int ret=nums[0];
    
    for(i=1;i

 

你可能感兴趣的:(Leetcode)