力扣:多数元素(详解)

news2025/7/3 22:39:13

前言:本期是关于多数元素的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读

今天你c了吗?

题目: 

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

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

示例 1:

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

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

代码实现:

 

int majorityElement(int* nums, int numsSize)
{
   
	int i = 0;
	int count = 1;
	int vast_num = nums[0];
	for (i = 1; i < numsSize; i++)
	{
		if (nums[i] == vast_num)
		{
			count++;
		}
		else
		{
			count--;
			if (count == 0)
			{
				vast_num = nums[i + 1];
			}
		}
	}
	return vast_num;
}

大致思路: 

预备了解:

count:统计多数元素的个数

vast_num:多数元素

1. 多数元素是数组中出现次数 大于 ⌊ n/2 ⌋ 的元素,即多数元素的个数等于n/2的那一部分可以匹敌其他数字的个数和,故而我们可以采用互拼思想

2. 互拼思想:消耗战术

a. 把这些所有的数字看成士兵,分属两个阵容,一个阵容全部由这个多数元素组成,一个阵容由全部的非多数元素组成

b. 设定数组中的第一个元素为多数元素,去和剩下的数字比较

    若是值相同,则多数元素阵容里的士兵成员+1

    若是值不同,则多数元素阵容里的士兵成员-1(两个不同阵容的士兵同归于尽)

    若是当前的多数元素里的士兵们全部被消耗完了,则更换另一个数字为多数元素

只要是真正的多数元素,此阵容里的士兵是不会被其他的数字联合起来组成的士兵消耗殆尽的

最终留下来的数字就是多数元素

代码解读:

part 1:设定多数元素

    int count = 1;
	int vast_num = nums[0];

设定数组中的第一个元素就是多数元素,则多数元素阵容里的士兵成员的个数变成1

part 2:互拼消耗

	for (i = 1; i < numsSize; i++)
	{
		if (nums[i] == vast_num)
		{
			count++;
		}
		else
		{
			count--;
			if (count == 0)
			{
				vast_num = nums[i + 1];
			}
		}
	}

从第二个元素开始进行比较:

若是当前下标为i的元素和当前的多数元素不同,则二者归属不同阵容,士兵互拼消耗,多数元素阵容里的士兵个数-1

多数元素阵容里的士兵每-1,就需要判断当前的多数元素阵容里的士兵个数是否为0

若是变成0,则说明当前的多数元素不是真正的多数元素,更换下标为i+1的元素作为新的多数元素

(因为下标为i的元素已经和旧的多数元素阵容里的一个士兵同归于尽了)

若是值相同,则二者归属相同阵容,多数元素阵容里的士兵个数+1

part 3

最终两个阵容的互拼消耗的结果是:只会留下真正多数元素阵容里的士兵

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

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

相关文章

Python爬虫实战之哔哩哔哩二维码登录申请

前言 哈喽&#xff0c;好久不见了吧&#xff0c;各位新年好&#xff01;博主春节也是比较忙的&#xff0c;没时间去写文章和"coding"。最近我们学校也是初九就开学了&#xff0c;所以更加没时间创作了&#x1f923; 言归正传&#xff0c;本次写这篇文章算是想要对我…

软件测试基础(五) 之 了解测试团队的组织架构

今天来了解一下软件测试团队的组织架构模式到底是什么样子。测试团队的组织架构模式的分类一个公司软件测试的组织架构&#xff0c;可能会决定你未来的成长空间&#xff0c;同时也决定了我们的工作模式到底是什么样子。现在测试行业内通常测试团队的组织架构主要分成两种&#…

亚马逊站内流量太少,如何拓展流量渠道增加产品销量?

近两年&#xff0c;经历了行业大洗牌之后&#xff0c;由于入驻平台卖家逐日增多&#xff0c;站内广告成本越来越高&#xff0c;想要抢占更多的站内流量变得愈发困难&#xff0c;一天出不了几单的情况也随处可见。因此&#xff0c;当站内流量的获取遭遇瓶颈&#xff0c;卖家想要…

阿里二面:RocketMQ 消费者拉取一批消息,其中部分消费失败了,偏移量怎样更新?

大家好&#xff0c;我是君哥。最近有读者参加面试时被问了一个问题&#xff0c;如果消费者拉取了一批消息&#xff0c;比如 100 条&#xff0c;第 100 条消息消费成功了&#xff0c;但是第 50 条消费失败&#xff0c;偏移量会怎样更新&#xff1f;就着这个问题&#xff0c;今天…

Pycharm出现‘Error loading package list:Connection refused: connect’问题

问题描述依次打开File->Settting窗口点击图中号弹出如下错误&#xff1a;Package错误窗口‘Error loading package list:Connection refused: connect 一段时间后继续弹出以下窗口&#xff1a;2.问题分析目前这个问题普遍说是由于网络配置原因引起的&#xff0c;在这之前&am…

【数据结构/C++】 树详解

目录树树的定义树的基本术语二叉树⼆叉树的种类满二叉树完全二叉树二叉树的性质二叉树的遍历方法前序遍历中序遍历后序遍历层序遍历二叉树的实现树 树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个结点的有限集。n0时称为空树。在任意一颗非空树中…

[Effective Objective] 块与大中枢派发

为了解决多线程问题&#xff0c;苹果公司以全新的方式设计了多线程。核心就是“块”&#xff08;block&#xff09;与“大中枢派发”&#xff08;Grand Central Dispatch, GCD&#xff09;。 “块”是一种可在C、C及Objective-C代码中使用的“词法闭包”&#xff0c;借由此机制…

在一起多少天怎么设置?如何微信推送在一起多少天

马上情人节要到了&#xff0c;你和你的对象在一起多久了&#xff1f;两个人在恋爱中&#xff0c;会需要记录彼此在一起的每一天&#xff0c;特别是一些重要的纪念日比如100天纪念日&#xff0c;365天、或者520天纪念日。市面上有许多工具&#xff0c;可以帮我们记录这些重要的日…

指针空值nullptr(C++11)

在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现 不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下 方式对其进行初始化&#xff1a;void TestPtr() { in…

【Docker 02】docker镜像和容器命令大全

对于入门学习者,更推荐的方式是通过官网的Reffrence手册,学习使用命令,不仅存在用法,选项参数的解释,还有用力example。 docker命令的基本语法结构: docker 子命令 [选项] [参数] 一、Docker基本命令 1.镜像有关 一批模板文件,不同的镜像可以包含的环境内容是不一样的,…

深入了解多线程原理

目录 背景知识&#xff1a; 什么是进程&#xff1f; 什么是线程&#xff1f; 线程与进程的区别&#xff1a; Thread类及常用方法&#xff1a; 循环打印的例子&#xff1a; start() 和 run() 的区别&#xff1a; 通过监视窗口查看线程&#xff1a; 创建线程&#xff1a; 1.继承 …

console控制台有sql语句输出但log文件中不输出sql解决方式

控制台可以输出sql&#xff0c;但是log文件中无sql输出&#xff0c;如何解决&#xff1f;把握两点就可以输出&#xff1a;第一点&#xff0c;mybatis 本身的logImpl配置这个参数是配置mybatis所使用的日志框架&#xff0c;取值范围如下&#xff1a;SLF4JLOG4J #表示使用LOG4J作…

提名倒计时! | 2022 龙蜥社区优秀贡献者

各位盆友们&#xff1a;2022 年&#xff0c;那些为龙蜥壮大做出杰出贡献的人们&#xff0c;包括开源背后的推动者、组织者、布道者、代码贡献者&#xff0c;让我们看到了热爱技术的力量&#xff01;为此社区推出「2022 龙蜥社区优秀贡献者」活动。截至目前&#xff0c;距离报名…

CSAPP Malloc Lab

CSAPP Malloc Lab 在这个实验室中&#xff0c;您将为C程序编写一个动态存储分配器&#xff0c;即您自己版本的malloc、free和realloc例程&#xff0c;实现一个正确&#xff0c;高效和快速的分配器。本实验性能指标有两个方面&#xff0c;内存利用率和吞吐量&#xff0c;这两个…

fpga图像处理(基于camera的图像读取和显示)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 市面上目前很多的fpga开发板都有camera到lcd的显示demo。处理流程也是很相似的。一般的流程都是fpga首先初始化cmos,接着就是把数据从cmos读出来存储到sdram里面,显示模块再从sdra…

C语言高级教程-C语言数组(六):变长数组

C语言高级教程-C语言数组&#xff08;六&#xff09;&#xff1a;变长数组一、本文的编译环境二、一维数组在执行期间确定长度三、二维数组在执行期间确定长度四、一维变长数组实例五、完整程序5.1 Main.h 文件程序5.2 Main.c 文件程序六、总结一、本文的编译环境 本文的编译环…

压缩包版本快速安装MySQL教程

安装MySQL 跟随老师 狂神学java 学习地址 bilibilihttps://www.bilibili.com/video/BV1NJ411J79W?p1&vd_source69de4cea8c2ffc0f520876695f09a2da 这里建议大家使用压缩版 , 安装快 , 方便 . 不复杂 . 1、软件下载mysql5.7 64位下载地址: https://dev.mysql.com/get/Dow…

数据治理与IT治理的关系

前面我们辨析了数据治理的概念。这一篇文章要讲数据治理与IT治理的关系&#xff0c;首先来看看IT治理的概念。IT治理的理念最早是IBM&#xff08;InternationalBusiness Machines Corporation&#xff0c;国际商业机器公司&#xff09;引入中国的&#xff0c;属于公司治理的一部…

中金公司:全面注册制监管规则解读(附97页报告原文pdf下载链接)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿推荐技术在vivo互联网商业化业务中的实践.pdf2023年&#xff0c;如何科学制定年度规划&a…

Spring Batch 批处理数据表

目录 引言 概述 batch_job_instance表 batch_job_execution表 batch_job_execution_context表 batch_job_execution_params表 btch_step_execution表 batch_step_execution_context表 H2内存数据库 转视频版 引言 接着上篇&#xff1a;Spring Batch 步骤对象-返回状…