【算法集训之线性表篇】Day 08

news2024/11/26 17:24:25

文章目录

  • 题目
  • 基本设计思想
    • 思路一
    • 思路二
  • 代码实现
  • 效果

题目

已知一个整数数列A={a0,a1,a2,…,an-1},其中0<=ai<n(0<=i<n)。若存在ap1=ap2=ap3=…=apm=x且m>n/2(0<=pk<n,1<=k<=m),则成x为A的主元素。例如A={0,5,5,3,5,7,5,5},则5为主元素;又如A={0,5,5,3,5,1,5,7},则A中没有主元素。假设A中的n个元素保存在一维数组中,请设计一个尽可能高效的算法,找出数组A的主元素。若存在主元素,则输出主元素;否则,输出-1。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,用C/C++实现算法。
  3. 说明所设计的算法的时间复杂度和空间复杂度。

基本设计思想

思路一

  1. 由题目可知,主要要求找出数组中重复值最多的元素并判断它是否为主元素。
  2. 因此,我们可以考虑先利用二路归并排序算法将数组变为有序。
  3. 接下来,再利用双指针i,j用于记录数组中相同值元素的个数,用变量count记录最大个数,变量mainElem记录主元素值。
  4. 结束数组遍历后,将count值与数组长度/2相比。若大于数组长度/2,则返回mainElem;否则,返回-1。

思路二

  1. 我们可以考虑计数排序的思想,利用一个辅助容器map记录arr中各元素值以及出现的个数。
  2. 然后,找出辅助数组中值最大的元素并判断是否符合主元素要求。即可完成题目要求。

代码实现

只实现算法二的代码

int LinearList::Question_12()
{
    if(arr.length <= 1)
        return arr.data[0];

    map<int,int> mapp;      //设置map容器用于存储arr数组中的所有元素值和对应的元素个数
    mapp[arr.data[0]] = 1;

    for(int i = 1;i < arr.length;i ++)
    {
        int value = arr.data[i];
        if(mapp.count(value))
            mapp[value]++;
        else
            mapp[value] = 1;
    }

    int maxCount = -1,maxElem = 0;
    for(auto &pair : mapp)      //遍历map,找出重复次数最多的元素
    {
        if(pair.second >= maxCount)
        {
            maxElem = pair.first;
            maxCount = pair.second;
        }
    }

    if(maxCount > arr.length/2) //判断是否符合主元素条件
        return maxElem;
    else
        return -1;
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746316.html

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

相关文章

Python模拟MQTT v3.1.1服务器

示例代码 import logging import asyncio from hbmqtt.broker import Broker# 设置日志级别为DEBUG logging.basicConfig(levellogging.DEBUG)# 创建MQTT服务器 broker Broker()# 启动MQTT服务器 async def start_broker():await broker.start()# 停止MQTT服务器 async def s…

好用到哭!后悔没有早点看到这个微信多账号管理工具!

作为一款及时通讯软件&#xff0c;微信是许多企业进行客户运营的选择工具。企业的员工利用微信与客户进行沟通&#xff0c;并且许多客单也都在微信上如数完成。然而&#xff0c;微信本身并不具备运营需要的很多功能&#xff0c;所以需要借助第三方工具来实现。 安全吗&#xf…

day20 数组指针

int main(void) {char *name[5] {"hello","china","beijing","project","Competer"};int i;for(i0;i<5;i){printf("%s\n",name[i]);//结果打印五个字符串}return 0; }数组指针&#xff0c;存了5个指针&#x…

串行FLASH文件系统FatFs-实际应用

目录 串行FLASH文件系统FatFs-实际应用 功能展示 程序代码 程序过程分析 串行FLASH文件系统FatFs-实际应用 功能展示 实验主要使用我们移植好的FatFs的FLASH文件系统实现三个功能&#xff1a;设备信息获取、文件定位写入功能测试和文件信息获取测试功能。 最终串口输出结…

4.带你入门matlab排序最值标准差标差(matlab程序)

%% 学习目标&#xff1a;排序&#xff0c;最值&#xff0c;标准差&#xff0c;方差 代码及结果 %% 排序 clear all; X[1 3 4;8 3 5;2 7 4] y1sort(X) %按列由小到大排序 y2sort(X,2) %按行由小到大排序 y3sort(X,1,descend) %按列由大…

自定义程序包不存在的解决方法

方案一&#xff1a; 在pom文件中加入以下代码 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.4.2</version><configuration><skipTests>true</sk…

数据驱动的决策优化,半导体CMS系统在企业管理中的应用

在当今信息时代&#xff0c;数据的重要性在企业管理中愈发凸显。半导体制造业作为一个高度自动化和数据密集的行业&#xff0c;利用数据进行决策优化对于企业的成功至关重要。在这方面&#xff0c;PreMaint CMS系统扮演着关键的角色&#xff0c;为企业管理提供了数据驱动的决策…

Git Commit的规范及高级使用方法

git commit是日常工作中使用率极高的一个命令&#xff0c;但是根据我从业5年的经验来看&#xff0c;大多数人在用git commit命令时都很粗糙&#xff0c;比如git commit -m 后跟的message是五花八门&#xff0c;有用中文的&#xff0c;有用英文的&#xff0c;甚至还有直接跟111的…

小程序搭建教程

小程序搭建流程 随着移动互联网的发展&#xff0c;小程序成为了营销和服务的重要渠道之一。在本文中&#xff0c;我们将介绍如何搭建一个小程序的详细流程&#xff0c;包括公众号申请、支付微信认证费、复用资质申请小程序、开通微信支付、绑定第三方开发平台、添加商品服务内…

基于SpringBoot的企业人力资源管理系统设计与实现

1.引言 随着经济改革开放的发展&#xff0c;企业之间的竞争也越来越激烈&#xff0c;在这样的大环境下&#xff0c;企业要想立于不败之地&#xff0c;不仅要有好的商品&#xff0c;更要有一支强有力的团队&#xff0c;其本质就是人才。企业对人才的需求不断的增加&#xff0c;…

视频剪辑素材网站,免费可商用,赶紧马住~

推荐几个高质量视频素材网站&#xff0c;免费可商用&#xff0c;建议收藏&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库虽然是一个设计网站&#xff0c;但它还有非常丰富的视频和音频素材&#xff0c;视频素材全部都是高清无水印&#xff…

485远传水表抄表系统

485远传水表抄表系统是一种基于RS-485通信协议的远程抄表系统&#xff0c;它利用现代通信技术&#xff0c;实现了对水表数据的远程采集、传输和处理&#xff0c;是智慧城市建设的重要组成部分。本文将从以下几个方面对485远传水表抄表系统进行全面介绍&#xff1a; 一、系统组成…

【Spring Boot】Spring Boot的系统配置 — 系统配置文件

系统配置文件 Spring Boot的系统配置文件&#xff0c;包括application.properties和application.yml配置文件的使用以及YML和Properties配置文件有什么区别&#xff0c;最后介绍如何更改Spring Boot的启动图案。 1.application.properties Spring Boot支持两种不同格式的配置…

pyqt结合深度学习框架做系统

时隔将近两个月&#xff0c;我胡汉三又回来啦&#xff01;&#xff01;&#xff01;将近两个月玩了一个月&#xff0c;半个月面试&#xff0c;半个月吃土沉淀&#xff08;有收获&#xff09;也投出去一篇论文&#xff08;外审中&#xff0c;关于深度学习神经网络改进的一篇病害…

如何将代理IP集成到自动化测试框架中?

自动化测试框架是现代软件工程中不可或缺的一部分。它们提供了许多好处&#xff0c;包括&#xff1a;更快的测试速度&#xff0c;更高的可靠性和更广泛的测试覆盖范围。然而&#xff0c;在测试过程中&#xff0c;有些网站可能需要使用代理IP&#xff0c;这是因为一些网站会限制…

踩坑记录:xorm的sql()函数后无法使用FindAndCount()

一、起因 懒省事想用 sql 写个有连表操作的分页查询语句&#xff0c;看到 xorm 中 sql 要和代码紧密纠缠在一起就不爽&#xff0c;所有就想用 xorm 中的 session.SQL(sql).Limit(size, offset).FindAndCount() 方法解决。不曾想。。。 sql: expected 15 destination argument…

[计算机入门] 磁盘、磁盘分区、盘符、卷标

2.5 磁盘、磁盘分区、盘符、卷标 磁盘&#xff1a;指计算机中存储数据和文件的物理设备&#xff0c;也称为硬盘。 磁盘分区&#xff1a;指将一个磁盘分成多个逻辑部分&#xff0c;每个部分可以独立地进行管理和操作&#xff0c;例如格式化、安装操作系统等。 如上图&#xf…

AWS 中文入门开发教学 46- S3 - AWS的存储核心, Simple Storage Service

知识点 S3的基础知识官网 https://aws.amazon.com/cn/s3 基础介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,(其实就是文件存储) 提供行业领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用 S3 来存储并保护各种…

归并排序—C语言实现

前言 &#x1f970;在学数据结构的第一节课就知道了数据结构课程是要管理并且学会操作数据&#xff0c;当然操作数据首先想到的就是数据的排序&#xff0c;排过顺序的数据的使用价值才够大。前面我们学习了顺序表也学习了链表等等&#xff0c;这些就是储存数据的方法&#xff0…

2021机器学习阶段性复盘

文章目录 特征选择一、GBDT和Xgboost简介二、 GBDTLR协同过滤&#xff0c;SVD的劣势&#xff1a;极大化似然估计Wide&DeepxDeepFM朴素贝叶斯SVM转为拉格朗日函数转为对偶问题 决策树分类交叉熵损失函数数据预处理连续型特征为什么取对数 深度学习激活函数的作用Softmax与Si…