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

面试经典算法150题系列-数组/字符串操作之多数元素

序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。

温故而知新,可以为师矣!加油,未来的技术大牛们。

多数元素

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

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

示例 1:

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

示例 2:

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

实现思路:这个问题是经典的"多数投票问题"(Boy Scout Rule),可以使用摩尔投票算法(Moore's Voting Algorithm)来解决。这个算法的核心思想是使用两个变量,一个记录当前的候选多数元素,另一个记录该元素的票数。遍历数组,对于每个元素,如果它与当前候选元素相同,则增加票数;如果不同,则减少票数。如果在减少票数后票数变为0,则将当前元素作为新的候选多数元素。

实现代码:

public int majorityElement(int[] nums) {int candidate = nums[0]; // 当前候选多数元素int count = 1; // 当前候选元素的票数// 摩尔投票算法的主体for (int i = 1; i < nums.length; i++) {if (count == 0) {candidate = nums[i]; // 重置候选元素count = 1; // 重置票数} else if (nums[i] == candidate) {count++; // 如果当前元素与候选元素相同,增加票数} else {count--; // 如果当前元素与候选元素不同,减少票数}}// 根据题目保证,不需要验证步骤,直接返回候选多数元素return candidate;
}

这个方法的时间复杂度是 O(n),空间复杂度是 O(1),因为它只需要常数级别的额外空间。

小补充:如果数组是非空的,给定数组不一定存在多数元素呢?怎么实现呢?

思路:上述代码是选出可能为多数元素的候选元素,我们只要在这个基础上对其进行判断是否为多数元素即可。

实现代码:

public int majorityElement(int[] nums) {int candidate = nums[0]; // 当前候选多数元素int count = 1; // 当前候选元素的票数for (int i = 1; i < nums.length; i++) {if (nums[i] == candidate) {count++; // 如果当前元素与候选元素相同,增加票数} else {if (count == 0) {candidate = nums[i]; // 票数归零,更新候选元素} else {count--; // 如果当前元素与候选元素不同,减少票数}}}// 验证候选元素是否确实是多数元素int result = 0;int validCount = 0;//记录候选元素的个数for (int num : nums) {if (num == candidate) {validCount++;}}// 如果候选元素的票数大于数组长度的一半,则返回该元素if (validCount > nums.length / 2) {return candidate;}// 如果没有找到多数元素,则返回0return 0;
}

知识复习:int num : nums 是一种被称为“增强型for循环”(Enhanced For Loop)的语法结构,它用于遍历数组或集合中的每个元素。这个语法结构允许你用一种简洁的方式迭代数组或Iterable对象。

  • int num:这定义了一个名为 num 的变量,它将用于接收数组或集合中的当前元素。在这个上下文中,num 是每次循环中的元素变量名,你可以使用任何有效的变量名。

  • :(冒号):这个符号用于分隔变量定义和迭代的对象。

  • nums:这是被迭代的对象,可以是一个数组或实现了 Iterable 接口的集合。

整个表达式 int num : nums 的意思是:“对于数组或集合 nums 中的每个元素,用变量 num 引用它”。

下面是一个使用这种语法遍历数组的示例:

int[] nums = {1, 2, 3, 4, 5};for (int num : nums) {// 打印数组中的每个元素System.out.println(num);}

这段代码将打印:

1

2

3

4

5

每个循环迭代中,数组 nums 中的当前元素都会被赋值给变量 num,然后执行循环体内的代码。这种语法使得遍历数组和集合变得更加简洁和易于阅读。

相关文章:

面试经典算法150题系列-数组/字符串操作之多数元素

序言&#xff1a;今天是第五题啦&#xff0c;前面四题的解法还清楚吗&#xff1f;可以到面试算法题系列150题专栏 进行复习呀。 温故而知新&#xff0c;可以为师矣&#xff01;加油&#xff0c;未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其…...

海南云亿商务咨询有限公司领航抖音电商服务

在当下这个瞬息万变的互联网时代&#xff0c;短视频平台尤其是抖音&#xff0c;正以惊人的速度重塑着消费者的购物习惯与商家的营销版图。在这场电商盛宴中&#xff0c;海南云亿商务咨询有限公司凭借其在抖音电商领域的深厚积累与前瞻视野&#xff0c;正逐步成为众多商家转型升…...

C#初级——继承

继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类&#xff0c;不需要完全重新编写新的数据成员和成员函数&#xff0c;只需要设计一个新的类&#xff0c;继承了已有的类的成员即可。这个已有的类被称为的基类&#xff08;父类&#xff0…...

Github 2024-07-29 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目3非开发语言项目3Python项目1TypeScript项目1C++项目1Lean项目1HTML项目1免费编程学习平台:freeCodeCamp.org 创建周期:3302 天…...

nginx反向代理和负载均衡+安装jdk-22.0.2

ps -aux|grep nginx //查看进程 nginx 代理 nginx代理是负载均衡的基础 主机&#xff1a;192.168.118.60 这台主机只发布了web服务&#xff0c;没有做代理的任何操作 修改一下index.html中的内容 echo "this is java web server" > /usr/local/nginx/htm…...

软考高级科目怎么选?软考高级含金量排序

软考既是国家职业资格考试&#xff0c;又是职称资格考试&#xff0c;含金量很高。软考的报考不设置任何条件&#xff0c;可以跨级考试&#xff0c;也就是非相关专业的人&#xff0c;也可以直接考高级。因此近些年报考软考、尤其是软考高级的人越来越多。 软考高级证书&#xf…...

【机器学习西瓜书学习笔记——模型评估与选择】

机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…...

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…...

Zookeeper客户端和服务端NIO网络通信源码剖析

文章目录 服务端的ServerCnxFactory到底是个什么东西?ServerCnxFactory 的作用ServerCnxFactory 的实现使用 ServerCnxFactory 的示例注意事项ServerCnxFactory是什么时候完成初始化的?初始化流程代码示例详细步骤1. 创建实例2. 配置3. 启动初始化时机总结服务端基于NIO的Ser…...

从DevOps到DevSecOps是怎样之中转变?

DevSecOps是DevOps实践的自然演进&#xff0c;其重点是将安全集成到软件开发和部署流程中。在DevOps和DevSecOps发展之前&#xff0c;企业通常在在软件部署前进行集中的安全测试&#xff0c;导致安全介入严重滞后&#xff0c;漏洞分风险无法及时修复&#xff0c;影响上线交付。…...

ORM与第三方数据库对接的探讨及不同版本数据库的影响

对象关系映射&#xff08;Object-Relational Mapping&#xff0c;ORM&#xff09;是一种将程序中的对象与数据库中的数据进行映射的技术&#xff0c;使开发者可以通过操作对象来间接操作数据库。然而&#xff0c;在实际应用中&#xff0c;ORM并不是总能完美地对接陌生的第三方数…...

Windows远程桌面无法拷贝文件问题

场景说明 Winwdows远程桌面&#xff0c;相比Linux方便一点就是&#xff0c;同是windows连接&#xff0c;其中复制粘贴功能&#xff0c;可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时&#xff0c;发现无法在服务器上复制内容到本地&#xff0c;也无法从…...

优化数据处理效率,解读 EasyMR 大数据组件升级

EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前&#xff0c;我们已就其展开了多方位、多角度的详尽介绍。而此次&#xff0c;我们成功接入了大数据组件的升级和回滚功能&#xff0c;能够借助 EasyMR …...

并发编程AtomicInteger详解

AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类&#xff0c;用于对 int 类型的变量进行原子操作。它利用底层的 CAS&#xff08;Compare-And-Swap&#xff09;机制&#xff0c;实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...

ctfshow 权限维持 web670--web679

web670 <?php// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...

职场生存指南

求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...

Spring源码(八)--Spring实例化的策略

Spring实例化的策略有几种 &#xff0c;可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…...

部署KVM虚拟化平台

文章目录 KVM虚拟化架构KVM组成KVM虚拟化三种模式 KVM虚拟化架构 KVM模块直接整合在Linux内核中 KVM组成 e KVM Driver虚拟机创建虚拟机内存分配虚拟CPU寄存器读写虚拟CPU运行 QEMU(快速仿真器) 模拟PC硬件的用户控件组件提供I/O设备模型及访问外设的途径 KVM虚拟化三种模式 客…...

Java对象模型深度剖析:从POJO到ENTITY

引言 在Java企业级应用开发中&#xff0c;对象模型是构建软件架构的核心。它们不仅帮助我们组织代码&#xff0c;还提升了代码的可读性和可维护性。本文将深入介绍Java中的几种关键对象模型&#xff1a;POJO、DTO、DAO、PO、BO、VO、QO和ENTITY&#xff0c;以及DO&#xff0c;…...

Nginx日志分析:编写Shell脚本进行全面日志统计

Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中&#xff0c;Nginx都得到了广泛应用。在实际生产环境中&#xff0c;对Nginx日志的分析有助于我们了解网站的访问情况&#xff0c;发现潜在问题…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...