题目解析 1.找单独的数 | 豆包MarsCode AI刷题

  • 连marscode第一题都不会做的你打开了题目解析
  • 有人相爱,有人夜里开车看海,有人marscode第一题都做不出来。
  • abandon

问题分析

这道题目要求我们从一个数组中找到唯一不重复的数字卡片,其他数字均出现两次。这类问题在算法设计中被归类为 "找单一元素" 的问题,尤其强调了时间复杂度和空间复杂度的优化:

  • 时间复杂度要求:O(n)。
  • 空间复杂度要求:尽可能减少额外的空间开销。

解题思路

首先想到的就是哈希表,只要遍历两次就可以了。

哈希表

利用哈希表统计每个数字出现的次数:

  • 遍历数组时,将数字作为键,出现次数作为值记录在哈希表中;
  • 遍历完成后,检查哈希表,找到值为1的键,即为所求。

这种方法的时间复杂度为 O(n),因为只需要遍历数组一次,同时哈希表的插入和查询操作平均时间复杂度为 O(1)。

但空间复杂度为 O(n),因为需要额外存储所有的键值对,不符合题目中"尽量减少额外空间"的要求。

不过其实还有一个更高效的方法------异或

位运算:异或操作

一种巧妙且高效的方法是利用 异或运算 (XOR) 的性质:

  • a⊕a=0:相同的数字异或后为0;
  • a⊕0=a:任意数字与0异或仍为它本身;
  • 异或运算满足交换律和结合律:a⊕b⊕a=(a⊕a)⊕b=0⊕b=b。

基于上述性质,题目中数组中的所有成对数字会两两抵消,只剩下唯一的单一数字。因此,通过对数组中的每个数字依次进行异或操作,最终结果就是我们要找的独特数字。

算法步骤

  1. 初始化一个变量 unique_number = 0
  2. 遍历数组 cards,将每个数字依次异或到 unique_number 上;
  3. 遍历结束后,unique_number 就是结果。

代码实现

arduino 复制代码
def solution(cards):
    unique_number = 0
    for card in cards:
        unique_number ^= card
    return unique_number

时间复杂度:O(n) ------ 只需遍历一次数组。

空间复杂度:O(1) ------ 只使用了一个额外变量 unique_number

总结

方法 时间复杂度 空间复杂度 备注
哈希表 O(n) O(n) 高效,但空间开销较大
异或操作 O(n) O(1) 高效,最优解法

利用异或运算的性质,这道题可以在时间复杂度 O(n) 和空间复杂度 O(1) 下解决,展现了算法设计中巧用数学性质的魅力。

相关推荐
好家伙VCC24 分钟前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
liulilittle2 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
bkspiderx3 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
中华小当家呐5 小时前
算法之常见八大排序
数据结构·算法·排序算法
沐怡旸5 小时前
【算法--链表】114.二叉树展开为链表--通俗讲解
算法·面试
一只懒洋洋6 小时前
K-meas 聚类、KNN算法、决策树、随机森林
算法·决策树·聚类
方案开发PCBA抄板芯片解密7 小时前
什么是算法:高效解决问题的逻辑框架
算法
songx_997 小时前
leetcode9(跳跃游戏)
数据结构·算法·游戏
小白狮ww7 小时前
RStudio 教程:以抑郁量表测评数据分析为例
人工智能·算法·机器学习
AAA修煤气灶刘哥7 小时前
接口又被冲崩了?Sentinel 这 4 种限流算法,帮你守住后端『流量安全阀』
后端·算法·spring cloud