问题来源:力扣算法面试题汇总

问题描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

例:
输入: [4,1,2,1,2]
输出: 4

# 输入
nums = [4, 1, 2, 1, 2]

1. O(n2)O(n^2)O(n2)算法

分析:较为直接的思路是做两层遍历。

# O(n2)算法
# 第一层遍历
for i in range(len(nums)):# 设置flag,默认为1,只要找到相同元素,则为0flag = 1# 第二层遍历for j in range(len(nums)):if i == j: continue# 找到相同元素则令flag=0if nums[i] == nums[j]:flag = 0if flag == 1:print(nums[i])break

这道题实际要求线性时间,所以,我们的算法必须是常数次遍历。

2. O(n)O(n)O(n)时间+额外空间

思路:
第一遍遍历:找出nums最小值
第二遍遍历:找出nums最大值
第三遍遍历:创建桶(list长度=最大值-最小值+1)
第四遍遍历:对桶进行填充,默认元素为0
第五遍遍历:找出桶元素为1的元素,并返回

# O(n)+额外空间
min_num = min(nums);
max_num = max(nums);
# 创建桶
basket = [0 for i in range(max_num-min_num+1)]
# 填充桶
for i in range(len(nums)):temp = nums[i] - min_num;basket[temp] += 1;
# 桶中找出值为1的元素
for i in range(len(basket)):if basket[i] == 1:print(min_num+i)break

3. O(n)O(n)O(n)时间+常数空间

思路:利用异或位运算。具体如下,

  • 交换律:a ^ b = b ^ a
  • 相同数异或为0:a ^ a = 0
  • 与0异或数不变:a ^ 0 = a
num = nums[0];
for i in range(1, len(nums)):num = num ^ nums[i]
print(num)

只出现一次的数字 (桶排序和位运算)相关推荐

  1. 【LeetCode笔记】136. 只出现一次的数字(Java、位运算)

    文章目录 题目描述 代码 & 思路 题目描述 评论区一个评论很不错:不用额外空间,首先考虑位运算. 代码 & 思路 异或 ^ : 相同得0 与0得本身 满足交换律 那么好办了,abcd ...

  2. 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

    文章目录 1. 题目 2. 解题 2.1 充分利用题目信息 2.2 位运算 2.3 二分查找 1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范 ...

  3. 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)

    动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...

  4. leetcode刷题笔记——剑指offer(二)[回溯、排序、位运算、数学、字符串]

    这里写目录标题 搜索与回溯 剑指 Offer 12. 矩阵中的路径 剑指 Offer 13. 机器人的运动范围 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树 ...

  5. [Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]

    [问题描述][中等] [解答思路] 1. 暴力 逐位与 ,只需要判断i= 0 或 i == 2147483647 的话,就跳出 for 循环即可. 时间复杂度:O(N) 空间复杂度:O(1) publ ...

  6. leetcode 448. Find All Numbers Disappeared in an Array | 448. 找到所有数组中消失的数字(原地,位运算)

    题目 https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 题解 遍历数组,将数组中每个数字 n 作为下标,将 ...

  7. 476. 数字的补数 【位运算】

    https://leetcode-cn.com/problems/number-complement/ class Solution {public:int findComplement(int nu ...

  8. leetcode 476. Number Complement | 476. 数字的补数(位运算)

    题目 https://leetcode.com/problems/number-complement/ 题解 class Solution {public int findComplement(int ...

  9. 【剑指offer】登峰造极--数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 位运算,异或思路,反正我是想不到-看了题解和评论才弄懂是怎么一回事. 按位与&, ...

最新文章

  1. TensorFlow指定CPU和GPU方法
  2. 四川大学c语言期末试题答案,四川大学计算机学院2005级C语言程序设计试卷(2份,有答案)...
  3. hdu 3622 二分+2-sat
  4. c 打印 callback 函数名_Go 中的函数
  5. Android开发笔记(二)
  6. 如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!
  7. 挑战王者荣耀“绝悟” AI,会进化的职业选手太恐怖了!
  8. 代码中目录是否以分隔符结尾的再讨论
  9. 如果没有证据,判断一个事件的主谋的方法
  10. selnium 判断页面加载完成_Selenium_等待页面加载完毕
  11. DotNetBar TreeGx用法
  12. KNN和kmeans算法的区别
  13. creat是什么意思中文翻译_CREAT是什么意思中文翻译
  14. 脑子里想的是A,嘴巴上说的是B,实际上做的是C,幻想前景远大的是D,可真正赚钱的恰恰却是E...
  15. 从卫星影像的视角见证莆田母亲河(美丽的木兰溪)改造前后的容颜变化
  16. 高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)
  17. 使用 Marvelous Designer 为DAZ Studio 的 Genesis8 Female做衣服 1
  18. 用 Python 找出了拉黑 QQ 空间屏蔽我的大人物
  19. mysql rebuild index_批量rebuild索引
  20. 计算机组成原理 唐朔飞229页

热门文章

  1. F - Wormholes(判断是否存在负环)
  2. 分拆素数和【筛选法】
  3. .net开发中用BackgroundWorker实现多线程
  4. 数据结构 (二) ----- 单向链表双向链表
  5. Python:SyntaxError: unexpected EOF while parsing
  6. MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?...
  7. 从持续交付看敏捷开发的自相似性(敏捷开发的心跳)
  8. extjs 如何将局部的变量变为全局变量
  9. 大量数据通过Phoenix插入到hbase报错记录(2)
  10. CRM【第三篇】: crm业务