题目解析 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) 下解决,展现了算法设计中巧用数学性质的魅力。

相关推荐
karmueo4623 分钟前
视频序列和射频信号多模态融合算法Fusion-Vital解读
算法·音视频·多模态
写代码的小球3 小时前
求模运算符c
算法
大千AI助手7 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao8 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记8 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲9 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东9 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
pumpkin8451410 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的10 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法