• 力扣 | 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;
    }
    

      

  • 相关阅读:
    报数游戏
    Dynamics CRM 2013 初体验(2):UI
    Lucene.net常见功能实现知识汇总
    hdu 1853 最小费用流好题 环的问题
    MessagerService总结
    [置顶] Android EditText/TextView使用SpannableString显示复合文本
    MySQL Dll语句
    JavaScript表单验证
    intellij—idea14 注冊机
    OL记载Arcgis Server切片
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11819413.html
Copyright © 2020-2023  润新知