力扣 | 169. 求众数

题目:

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

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

示例 1:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element

思路:

用栈来进行统计,空间复杂度:O(n) ,时间复杂度:O(n)

#include<stdlib.h>
#include<stdbool.h>
#include<stdio.h> 
int majorityElement(int* nums,int numsSize )
{
	int *stack =(int *)malloc(sizeof(int) * numsSize);
	int top = -1;
	int i;
	for(i=0;i<numsSize;i++)
	{
		if(top==-1)
		{
			stack[++top]=nums[i];
		}
		else if(stack[top]==nums[i])
		{
			stack[++top]=nums[i];
		}
		else
		{
			top--;
		}
	}
	return stack[0];
}
int main()
{
	int nums[]={1,2,1,1,2,1,3,1};
	int result = majorityElement(nums,7);
	printf("result = %d
",result);
	return 0;
}

  用栈来统计,空间复杂度O(1):

cand存放结果数,count存放出现的次数

#include<stdlib.h>
#include<stdbool.h>
#include<stdio.h> 

int majorityElement(int* nums,int numsSize )
{
	int cand;
	int count=0;
	for(int i=0;i<numsSize;i++)
	{
		if(count==0)
		{
			cand = nums[i];
			count++;
		}
		else if(cand==nums[i])
		{
			count++;
		}
		else
		{
			count--;
		}
	}
	return cand;
}
int main()
{
	int nums[]={1,2,1,1,2,1,3,1};
	int result = majorityElement(nums,7);
	printf("result = %d
",result);
	return 0;
}

  

原文地址:https://www.cnblogs.com/chrysanthemum/p/11819413.html