首页 > 其他分享 >找单独的数(获取数组中只出现一次的数)

找单独的数(获取数组中只出现一次的数)

时间:2024-11-08 11:14:54浏览次数:5  
标签:数字 卡片 获取 样例 单独 异或 result 数组 cards

问题描述

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小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. 使用异或运算:由于题目中提到除了一个数字之外,所有的数字都恰好出现了两次,你可以利用异或运算的特性来解决这个问题。异或运算有以下两个重要特性:

    1. a ^ a = 0:任何数与自身异或的结果是0。
    2. a ^ 0 = a:任何数与0异或的结果是它本身。
  2. 遍历数组:你可以遍历整个数组,对每个元素进行异或运算。最终的结果就是那个唯一的数字。

  3. 初始化结果变量:你可以初始化一个变量 result 为0,然后遍历数组,将每个元素与 result 进行异或运算。

function solution(cards) {
    let result = 0;
    for (let num of cards) {
        result ^= num
    }

    return result;
}
// console.log(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]))
console.log(solution([1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6]))

标签:数字,卡片,获取,样例,单独,异或,result,数组,cards
From: https://blog.csdn.net/qq_39285162/article/details/143619562

相关文章

  • Electron 项目中获取 Windows 进程列表的深入剖析
    Electron项目中获取Windows进程列表的深入剖析一、引言在Windows系统下的Electron项目开发中,获取进程列表信息是一项十分关键的任务。这对于进程管理、资源监控、应用程序交互等多种功能的实现都有着重要意义。我们将围绕给出的代码片段,深入探讨如何完善代码以准确......
  • golang 数组切片
    golang基础数组+切片packagemainimport( "fmt")//数组切片学习funcmain(){ //数组的初始化方式 nums1:=[3]int{1,2,3}//指定长度,全部初始化 fmt.Println("nums1:",nums1) nums2:=[5]int{1,2,3}//指定长度,部分初始化 fmt.Println("nums2:",nums2)......
  • LeetCode 2535[数组元素和与数字和的绝对差值]
    题目链接LeetCode2535[数组元素和与数字和的绝对差值]详情实例提示题解思路遍历容器,依次求出数字和与元素和,然后求差值:通过getSun函数,求取元素的数字和 getSun函数的实现:  将其对10取余操作,获取的余数即为当前位的数字  然后再除以10,继续对其进行10的取......
  • 洛谷题单指南-二叉堆与树状数组-P2827 [NOIP2016 提高组] 蚯蚓
    原题链接:https://www.luogu.com.cn/problem/P2827题意解读:初始n个数,每次取最大值x,根据u/v分成两部分:x*u/v,x-x*u/v,然后其余数都增加q,整个过程重复m次。输出有两类数据:第t,2t,3t...次取出的最大值;最后剩余的数第t,2t,3t...个,从大到小输出。解题思路:直观上,通过模拟法可以实......
  • SpringBoot获取项目文件的绝对路径和相对路径
    @目录1.场景2.说明项目代码大致样式获取路径说明3.举例说明网上常见几种方法的路径获取结果1.场景比如上传图片或者读取项目里的excel文件内容等,都需要准确获取文件路径2.说明项目代码大致样式获取路径说明所谓获取的相对路径,其实是获取项目打包后的target目录的路径,而......
  • c语言二维数组
    一、创建二维数组并初始化在c语言中二维数组可以在声明时直接初始化。#include<stdio.h>intmain(){//创建一个3x3的二维数组并初始化intmatrix[3][3]={{1,2,3},{4,5,6},{7,8,9}};return0;}二、访问二......
  • c语言一维数组
    一维数组数组的目的主要是为了解决在编程中需要存储和处理多个相同类型数据的问题。#include<stdio.h>intmain(){intarr[5]={1,2,3,4,5};//定义一个一维数组for(inti=0;i<5;i++){//使用for循环遍历数组printf("%d",arr[i]);//打......
  • php毕业设计流浪动物领养系统宠物领养网站PHP+MySQL+HTML计算机毕业设计PHP源码获取ph
    一、功能介绍基于php+mysql+html前台:网站首页宠物推荐最新宠物新闻咨询宠物分类宠物资讯评论登录/注册加入购物车、领养、个人中心后台:各种增删改查系统设置分类管理宠物管理领养管理评价管理新闻资讯用户管理二、效果展示三、代码展示CREATE......
  • 线段树与树状数组
    线段树与树状数组都是十分经典的数据结构,其实能用树状数组解决的问题也都能用线段树解决,但线段树相比于树状数组常数较大。单点修改区间查询线段树做法,树状数组做法,其实单纯实现这个还是用树状数组较好(毕竟常数小还好写)区间修改区间查询只有区间加树状数组做法,线段树做法既......
  • 力扣中等难度热题——长度为K的子数组的能量值
    目录题目链接:3255.长度为K的子数组的能量值II-力扣(LeetCode)题目描述示例提示:解法一:通过连续上升的长度判断Java写法:C++写法: 相比与Java写法的差别运行时间时间复杂度和空间复杂度时间复杂度:空间复杂度:解法二:双指针+极限优化优化前Java写法:优化前运行时......