当前位置: 首页 > news >正文

【C语言】每日一题(多数元素)

多数元素,链接奉上

方法

  • 1.摩尔投票
  • 2.合理但错误的方法
    • 2.1暴力循环
    • 2.2排序+求出中间元素中间元素

在这里插入图片描述

1.摩尔投票

先来简单的介绍摩尔投票:

摩尔投票是一种用来解决绝对众数问题的算法。

什么是绝对众数呢?

在一个集合中,如果一个元素的出现次数比其他所有元素的出现次数之和还多,那么就称它为这个集合的绝对众数。等价地说,绝对众数的出现次数大于总元素数的一半。

思路:

设置一个计数器count
利用绝对众数与非绝对众数相互对抗、抵消,
首先遍历数组
遇到相同的count++,不同的count--
在根据count的数值设置当前的candidate(投票对象)
因为绝对众数>非绝对众数,对抗过后剩下的那个元素一定是绝对众数

代码实现:

int majorityElement(int* nums, int numsSize)
{//mooreint i=0;int candidate=nums[0];//设置投票对象int count=1;//因为投票对象是nums[0],本身就是1票for(i=1,count=1;i<numsSize;i++)//遍历数组{if(candidate==nums[i])//当投票对象与当前元素相同时count++count++;else{//否则count--count--;if(count<0)//当投票对象票数<0,重新选择对象{candidate=nums[i];count=1;//票数重置为1}}}return candidate;
}

2.合理但错误的方法

这是题主自己经历的错误,因为超出运行时间,所以不可以用

但是
注意2.2中的方法会根据排序的不同方法而产生不同影响
例如:

冒泡排序会时间出界,但快速排序不会

2.1暴力循环

马有失蹄,暴力循环也会

思路:

设置计数器count=0
利用外部循环变量作为数组下标,
在内层也设置一个循环变量为数组下标,
与每一个数组元素进行比较,相同时count++ 当满足count>numssize/2break

代码实现:

int majorityElement(int* nums, int numsSize)
{int i = 0;for (i = 0; i < numsSize; i++){int count = 0;for (int j = 0; j < numsSize; j++){if (nums[i] == nums[j])count++;}if (count > numsSize / 2)break;}return nums[i];}

2.2排序+求出中间元素中间元素

思路:

先进行排序,之后求出nums[numsSize/2](中间元素),因为绝对众数所占元素必定过半,故中间元素一定为绝对众数,再return中间元素

代码实现:

int majorityElement(int* nums, int numsSize)
{int i = 0;int tmp = 0;for (i = 0; i < numsSize - 1; i++){for (int j = 0; j < numsSize - 1 - i; j++){if (nums[j] > nums[j + 1]){tmp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = tmp;}}}return nums[numsSize/2];
}

欢迎讨论哦

http://www.lryc.cn/news/126160.html

相关文章:

  • 后端 .net7 Minimal API 限流中间件(微信小程序无师自通十)
  • 背上沉重的书包准备面试之react篇
  • OpenCV-Python中的图像处理-霍夫变换
  • W5500-EVB-PICO做UDP Client进行数据回环测试(八)
  • npm install 中 --save 和 --save-dev 是什么?
  • 【Nginx17】Nginx学习:目录索引、字符集与浏览器判断模块
  • CA/TA开发编程实战-视频课程
  • (7)(7.1) 使用航点和事件规划任务
  • OCR相关模块——版面分析技术、表格文本识别
  • mov转mp4格式怎么转?
  • SSL握手协议相关概念
  • idea 打开java项目后新建的模块中,java文件夹需要变成蓝色,以及resources文件夹变成三条杠的
  • 【Docker】Docker network之bridge、host、none、container以及自定义网络的详细讲解
  • 滑模控制器理论推导和matlab/simulink实例分享
  • git 操作
  • 自建hexo博客并将原有的文章发布其上
  • 【双指针_和为 s 的两个数_C++】
  • HTML5的介绍和基本框架
  • 代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列
  • 日常BUG——普通页面跳转tabbar页面报错
  • SpringBoot复习:(48)RedisAutoConfiguration自动配置类
  • 软硬件免费,服务收费:网络安全商业模式正在被颠覆
  • 变形金刚:从零开始【01/2】
  • Opencv特征检测之ORB算法原理及应用详解
  • 【es6】函数柯里化(Currying)
  • 线上多域名实战
  • 【C语言】上手实验
  • 设计HTML5表单
  • 使用Kaptcha生成验证码
  • 【vue】vue中的插槽以及使用方法