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

news2025/1/27 19:38:37

多数元素,链接奉上

方法

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

在这里插入图片描述

1.摩尔投票

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

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

什么是绝对众数呢?

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

思路:

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

代码实现:

int majorityElement(int* nums, int numsSize)
{
    //moore
    int 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.coloradmin.cn/o/885168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java:迭代器常用方法、增强for循环、Lambda 表达式遍历集合、遍历集合案例

Java 迭代器概述&#xff1a;Iterator 迭代器常用方法 使用迭代器遍历集合时&#xff0c;一开始 it.next()在赵敏的位置&#xff0c;所以第一个打印输出的是赵敏&#xff0c;第二次就到了小昭的位置&#xff0c;第三次到了素素&#xff0c;第四次灭绝&#xff0c;如果多打印了…

探索Java中的面向对象与函数式编程思想

文章目录 &#x1f389; 欢迎来到 Java 学习路线专栏~探索Java中的面向对象与函数式编程思想1. 思想概述面向对象思想函数式编程思想 2. 面向对象思想写代码3. Lambda表达式格式4. 练习4.1 无参无返回值4.2 有参有返回值 5. Lambda省略格式6. 使用Lambda的前提条件 &#x1f38…

智慧乡村综合管控平台_数字孪生

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用&#xff0c;既是乡村振兴的战略方向&#xff0c;也是建设数字中国的重要内容。为了进一步提升乡村治理智能化、专业化水平&#xff0c;解决建设顶层缺失、数据孤岛等问题&#xff0c;数字孪生技术被广泛应…

谈谈智慧农业系统

目录 1.智慧农业的概念 2.智慧农业会用到什么技术 3.智慧农业的优势 4.智慧农业的发展前景 1.智慧农业的概念 智慧农业&#xff08;Smart Agriculture&#xff09;&#xff0c;也被称为农业4.0&#xff0c;是利用先进的信息技术和物联网技术来改进农业生产效率、可持续性和农…

JAVA生成订单号根,可自定义长度、前缀

效率还可以&#xff0c;生成100万数据大概在1秒多左右&#xff0c;不想写说明了&#xff0c;直接粘贴~ public static void main(String[] args) {System.out.println("开始时间" new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));L…

Java中调用伪原创API的方法【源码】

在Java中调用API的GET请求可以使用HttpURLConnection或者第三方库如OkHttp等。 使用HttpURLConnection的示例代码: import java.net.HttpURLConnection; import java.net.URL;URL url new URL("http://example.com/api?param1a&param2b"); HttpURLConnectio…

讯飞星火认知大模型全新升级,全新版本、多模交互—测评结果超预期

写在前面 版本新功能 1 体验介绍 登录注册 申请体验 2 具体使用 2.1 多模态能力 2.1.1 多模理解 2.1.2 视觉问答 2.1.3 多模生成 2.2 代码能力 2.2.1 代码生成 2.2.2 代码解释 2.2.3 代码纠错 2.2.4 单元测试 2.3 插件功能 2.3.1 PPT生成 2.3.2 简历生成 2.3.4 文档问答 3 其他…

TiDB基础介绍、应用场景及架构

1. 什么是newsql NewSQL 是对各种新的可扩展/高性能数据库的简称&#xff0c;这类数据库不仅具有NoSQL对海量数据的存储管理能力&#xff0c;还保持了传统数据库支持ACID和SQL等特性。 NewSQL是指这样一类新式的关系型数据库管理系统&#xff0c;针对OLTP&#xff08;读-写&…

如何保证微信小游戏存档不丢失?

引言 微信小游戏的兴起为玩家提供了一个轻松便捷的娱乐方式&#xff0c;然而&#xff0c;存档丢失问题一直以来都是开发者和玩家关注的焦点。为了确保玩家的游戏体验和投入能够得到充分的保障&#xff0c;开发团队需要采取一系列方法来保障微信小游戏存档不丢失。本文将介绍一…

C++之std::tuple应用实例(一百七十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

MES管理系统的哪些优势对企业帮助比较大

随着全球制造业的快速发展&#xff0c;MES制造执行系统已成为企业生产管理的重要工具。MES管理系统解决方案集成了企业生产流程中的各个环节&#xff0c;包括计划、调度、质量、设备等&#xff0c;为企业提供了全面的生产管理解决方案。制造企业MES系统的优势颇多&#xff0c;其…

matlab+yalmip+cplex和python3+scipy两种方式实现线性规划求解

Background 对于数学规划问题&#xff0c;有很多的实现。MatlabYALMIPCPLEX这个组合应该是比较主流的&#xff0c;尤其是在电力相关系统中占据着比较重要的地位。MATLAB是一个强大的数值计算工具&#xff0c;用于数学建模、算法开发和数据分析。Yalmip是一个MATLAB工具箱&#…

无涯教程-Perl - splice函数

描述 此函数从LENGTH元素的OFFSET元素中删除ARRAY元素,如果指定,则用LIST替换删除的元素。如果省略LENGTH,则从OFFSET开始删除所有内容。 语法 以下是此函数的简单语法- splice ARRAY, OFFSET, LENGTH, LISTsplice ARRAY, OFFSET, LENGTHsplice ARRAY, OFFSET返回值 该函数…

非常炸裂!一个只有135行源码的插件!

今天&#xff0c;我们接着讨论图片图片懒加载。这是前端性能优化中老生常谈的话题了。旨在提升页面初始化渲染性能和用户体验。 问题 我们是不是会遇到这样的场景&#xff1a; 当访问一个图片展示比较多的网页时&#xff0c;页面加载速度很慢&#xff0c;尤其是其中的图片半天…

C#数据类型转换

目录 1.常用的数据类型: ​编辑1.1别名概念例子: 输出结果&#xff1a; 2.数值类型之间的相互转换: 2.1举例: ​编辑输出结果: 1.常用的数据类型: 1.1别名概念例子: 输出结果&#xff1a; 用GetType来获取数据类型的时候&#xff0c;就是指向System.Byte和System.Char这个…

MAVEN利器:一文带你了解MAVEN以及如何配置

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…

Java:集合体系:Collection集合的常用方法(API)

集合体系 用ArrayList 和 HashSet 打印出来的结果 Collection 集合的常用方法&#xff08;API&#xff09; 由于Collection是一个接口 所以不能直接new Collection 编译看左边&#xff0c;运行看右边 转成数组时是Object 类型&#xff0c;方便将来往集合里添加任何数据 拓展&am…

wsl2 Ubuntu子系统 yolov8测试

文章目录 前言安装依赖下载权重测试 前言 OLOv8是Ultralytics公司推出的基于对象检测模型的YOLO最新系列&#xff0c;它能够提供截至目前最先进的对象检测性能。 借助于以前的YOLO模型版本支持技术&#xff0c;YOLOv8模型运行得更快、更准确&#xff0c;同时为执行任务的训练…

小额配资和大额配资是什么?

小额配资和大额配资是股票配资领域中常用的两种方式。本文将会详细介绍小额配资和大额配资的概念&#xff0c;并对其区别进行分析。 首先&#xff0c;小额配资是指投资者通过股票配资机构借取相对较小的资金进行投资。一般而言&#xff0c;小额配资的金额较低&#xff0c;通常…

JVM - 垃圾收集器

目录 垃圾收集器 串行垃圾收集器 并行垃圾收集器 什么是 吞吐量优先 什么是 响应时间优先 &#xff1f; CMS&#xff08;并发&#xff09;垃圾收集器 G1 垃圾收集器 垃圾收集器 垃圾收集器大概可以分为&#xff1a; 串行垃圾收集器并行垃圾收集器CMS&#xff08;并发&a…