字节青训入营考核十五题-Java-找单独的数

问题

问题描述

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。

要求:

  1. 设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

测试样例

样例1:

输入:cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
输出:4
解释:拿到数字 4 的同学是唯一一个没有配对的。

样例2:

输入:cards = [0, 1, 0, 1, 2]
输出:2
解释:数字 2 只出现一次,是独特的卡片。

样例3:

输入:cards = [7, 3, 3, 7, 10]
输出:10
解释:10 是班级中唯一一个不重复的数字卡片。

约束条件

  • 1 ≤ cards.length ≤ 1001
  • 0 ≤ cards[i] ≤ 1000
  • 班级人数为奇数
  • 除了一个数字卡片只出现一次外,其余每个数字卡片都恰好出现两次

思路

这个问题的目的是找出一个数组中唯一一个未重复的数字,所有其他数字在数组中都出现了两次。对于这个问题,使用 异或运算 是非常高效的解决方法。我们可以通过以下步骤解决问题:

  1. 异或运算特性

    • a ^ a = 0:两个相同的数异或结果是 0。
    • a ^ 0 = a:任何数与 0 异或的结果是它本身。
    • 异或是交换律结合律的,意味着无论操作顺序如何,结果都是一样的。

    因此,对于数组中所有数字,我们进行逐个异或操作,成对的数字都会互相抵消(变为 0),最终留下的就是唯一一个未重复的数字。

  2. 解决方案

    • 初始化一个变量 uniqueNumber 为 0。
    • 遍历数组中的每个数字,并将其与 uniqueNumber 进行异或操作。
    • 最后 uniqueNumber 中存储的就是唯一未重复的数字。

具体步骤:

  1. 初始化 uniqueNumber 为 0。
  2. 遍历输入数组,对每个数字进行异或操作。
  3. 返回 uniqueNumber,它即为唯一的未重复数字。

解释:

输入示例 1:{1, 1, 2, 2, 3, 3, 4, 5, 5}

  • 目标:在这个数组中,数字 1, 2, 3, 5 都出现了两次,而 4 是唯一没有重复的数字。

  • 过程

    1. 初始化 uniqueNumber = 0
    2. 遍历数组,对每个数字进行异或操作。根据异或运算的特性,相同的数字异或结果是 0,不同的数字异或结果是它们自己。

    计算过程

    • uniqueNumber = 0 ^ 1 = 1(第一个数字是 1,结果是 1
    • uniqueNumber = 1 ^ 1 = 0(第二个数字是 1,结果是 0,因为 1 ^ 1 = 0
    • uniqueNumber = 0 ^ 2 = 2(第三个数字是 2,结果是 2
    • uniqueNumber = 2 ^ 2 = 0(第四个数字是 2,结果是 0,因为 2 ^ 2 = 0
    • uniqueNumber = 0 ^ 3 = 3(第五个数字是 3,结果是 3
    • uniqueNumber = 3 ^ 3 = 0(第六个数字是 3,结果是 0,因为 3 ^ 3 = 0
    • uniqueNumber = 0 ^ 4 = 4(第七个数字是 4,结果是 4
    • uniqueNumber = 4 ^ 5 = 1(第八个数字是 5,结果是 1
    • uniqueNumber = 1 ^ 5 = 4(第九个数字是 5,结果是 4

    最终,uniqueNumber 的值是 4,它是唯一未重复的数字。

输入示例 2:{0, 1, 0, 1, 2}

  • 目标:在这个数组中,数字 01 都出现了两次,而 2 是唯一没有重复的数字。

  • 过程

    1. 初始化 uniqueNumber = 0
    2. 遍历数组,对每个数字进行异或操作。

    计算过程

    • uniqueNumber = 0 ^ 0 = 0(第一个数字是 0,结果是 0
    • uniqueNumber = 0 ^ 1 = 1(第二个数字是 1,结果是 1
    • uniqueNumber = 1 ^ 0 = 1(第三个数字是 0,结果是 1,因为 0 ^ 0 = 0,所以结果是 1
    • uniqueNumber = 1 ^ 1 = 0(第四个数字是 1,结果是 0,因为 1 ^ 1 = 0
    • uniqueNumber = 0 ^ 2 = 2(第五个数字是 2,结果是 2

    最终,uniqueNumber 的值是 2,它是唯一未重复的数字。

输入示例 3:{7, 3, 3, 7, 10}

  • 目标:在这个数组中,数字 73 都出现了两次,而 10 是唯一没有重复的数字。

  • 过程

    1. 初始化 uniqueNumber = 0
    2. 遍历数组,对每个数字进行异或操作。

    计算过程

    • uniqueNumber = 0 ^ 7 = 7(第一个数字是 7,结果是 7
    • uniqueNumber = 7 ^ 3 = 4(第二个数字是 3,结果是 4
    • uniqueNumber = 4 ^ 3 = 7(第三个数字是 3,结果是 7
    • uniqueNumber = 7 ^ 7 = 0(第四个数字是 7,结果是 0
    • uniqueNumber = 0 ^ 10 = 10(第五个数字是 10,结果是 10

    最终,uniqueNumber 的值是 10,它是唯一未重复的数字。

代码

public class Main {public static int solution(int[] inp) {int uniqueNumber = 0; // 初始化一个变量来存储最终的结果for (int num : inp) { // 遍历输入的数组uniqueNumber ^= num; // 对每个数字进行异或操作}return uniqueNumber; // 返回最终找到的单独数字}public static void main(String[] args) {// 测试用例System.out.println(solution(new int[] { 1, 1, 2, 2, 3, 3, 4, 5, 5 }) == 4);System.out.println(solution(new int[] { 0, 1, 0, 1, 2 }) == 2);System.out.println(solution(new int[] { 7, 3, 3, 7, 10 }) == 10);}
}

提交结果

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

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

相关文章

Unity学习之UGUI(三)

十二、Slider 1、作用 Slider是滑动条组件,是UGUI中用于处理滑动条相关交互的关键组件 创建Slider默认包括4个对象 父对象:Slider组件依附的对象 子对象:背景图,进度图,滑动块三组对象 2、主要参数 3、代码控制 voi…

win下搭建elk并集成springboot

一、ELK 是什么? ELK 实际上是三个工具的集合,Elasticsearch Logstash Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…

基于微信小程序疫苗预约系统ssm+论文源码调试讲解

第四章 系统设计 到目前为止,市面上已经存在了各种各样的软件系统,从系统的分类着手,主要应用范围倾向于办公系统,娱乐系统,社交系统,然后下面有很多比较细的分支系统。很多系统已经经过了市场的考验&…

MySQL慢查询问题排查

第一步:查看当前正在运行的事务状态 select trx_state,trx_started,trx_mysql_thread_id,trx_query from information_schema.innodb_trx; 其中: Trx_state:事务状态 Trx_started:事务启动时间 Trx_mysql_thread_id&…

c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!

文章目录 前言一、c/c内存分布二、c的内存管理方式2.1new/delete操作内置类型2.2new和delete操作自定义类型 三、operator new与operator delete函数3.1operator new与operator delete函数 四、new和delete的实现原理4.1 内置类型4.2 自定义类型 五、malloc/free和new/delete的…

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…

QT自定义工具条渐变背景颜色一例

使用样式定义: QWidget* toolbar new QWidget(this);toolbar->setObjectName("main_tool");toolbar->setStyleSheet("#main_tool{background: qlineargradient(x1:0 , y1:0 , x2:1 , y2:0,""stop:0 rgba(0,255,0, 0.2),"&q…

Flutter 鸿蒙化 flutter和鸿蒙next混和渲染

前言导读 这一个节课我们讲一下PlatformView的是使用 我们在实战中有可能出现了在鸿蒙next只加载一部分Flutter的情况 我们今天就讲一下这种情况具体实现要使用到我们的PlatformView 效果图 具体实现: 一、Native侧 使用 DevEco Studio工具打开 platform_view_example\oho…

React Native 项目 Error: EMFILE: too many open files, watch

硬件:MacBook Pro (Retina, 13-inch, Mid 2014) OS版本:MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹,最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web,出现如下错误&#xff1a…

头歌python实验:网络安全应用实践3-验证码识别

第1关:简单的验证码识别 本关任务:编写一个能简单识别验证码的小程序。 为了完成本关任务,你需要掌握: 使用 pytesseract 库与 PIL 库解析图片;环境配置;读取图片文本信息。使用 pytesseract 库与 PIL 库解析图片 pytesseract 库可以从图像中提取文本。Tesseract 是一…

嵌入式ARM平台 openwrt系统下 基于FFmpeg 的视频采集及推流 实践

ARM平台 openwrt系统下 基于FFmpeg 的视频采集及推流 实践 FFmpeg介绍FFmpeg x86平台试用安装推送本地视频文件ubuntu下使用ffmpeg 推flv文件,推送侧和服务器侧均正常。推送Mp4文件采集视频并推流采集视频并编码为h264, 编码的数据采用yuv420p推送h264视频边采集边推流成功ope…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证,完善农民闲置宅基地和闲置农房政策,探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

2.1.7-1 io_uring的使用

一、背景 (1)下面几个有关异步操作的例子: a)客户端和服务端的异步关系,就是客户端发送请求后不需要等待结果,接下来发送其他请求。 b)对于服务端,客户端来请求后,服务…

Lua开发环境如何安装?保姆级教程

大家好,我是袁庭新。Lua开发环境如何安装搭建?这套篇文章帮你搞定~ CentOS 7系统默认已经安装了Lua语言环境,因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…

SpringBoot入门之创建一个Hello World项目

文章目录 一、使用传统的方式1、创建一个SpringBoot项目2、配置pom.xml文件3、下载Maven依赖4、创建一个Controller类:com.devops.controller.HelloController5、创建一个引导类:com.devops.HelloApplication6、启动项目8、访问80809、完整项目结构 二、…

搜索引擎是如何理解你的查询并提供精准结果的?

目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 (一)整体分析 (二)爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 (三)索引系统 网页处理阶段 预处理阶段 反作弊分析…

leetcode 面试经典 150 题:多数元素

链接多数元素题序号169题型数组解法1. 排序法、2. Boyer-Moore投票算法难度简单熟练度✅✅✅✅✅ 题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的…

vulnhub靶场-potato(至获取shell)

arp-scan -l 扫描IP 使用御剑端口扫描扫描端口,扫到了80和7120两个端口,其中7120为ssh端口 使用dirb http://192.168.171.134 扫描目录 发现info.php 访问为phpinfo界面 访问192.168.171.134为一个大土豆,没什么用 所以我们从ssh入手 盲…

Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8

在 Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8 的步骤如下: ✅ 1. 检查 WSL 的安装 首先确保已经安装并启用了 WSL 2。 🔧 检查 WSL 版本 打开 PowerShell,执行以下命令: wsl --list --verbose确保 W…

信息科技伦理与道德2:研究方法

1 问题描述 1.1 讨论? 请挑一项信息技术,谈一谈为什么认为他是道德的/不道德的,或者根据使用场景才能判断是否道德。判断的依据是什么(自身的道德准则)?为什么你觉得你的道德准则是合理的,其他…