题目:

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]

思考:

主要考察位操作,如之前没有遇到过或写过比较难想出来,之前做过简单版本,即只有一个数字出现一次,求这个数字。

直观想法:采用dict,遍历一遍nums,key为nums中的num,value为count即可。之后遍历dict,将count的数值为1的num即key输出即可。时间复杂度为O(n),空间复杂度是O(n),不符合要求。

解答:

1)异或查找不同,即简单版本:只有一个数字出现一次,求这个数字。原理在与,任何数与自己异或都为0,0异或任何数都为任何数。因此,而已一直异或,最终的输出即为只出现一次的数字。

def singleNumbers(self, nums: List[int]) -> List[int]:res =0for num in nums:res = res^num#此时res有两位为1return res

2)有两个不同的数字时,同样先一直异或。最后异或的结果必然在某一位上为1(异或的本质就是找不同),这一位就是两个只出现一次数字的不同位。因此,a)先针对异或的结果寻找出为1的位(即两个数字不同的位)。b)将nums中的num与为1的位进行&操作,将数字分为两堆。在各堆分别进行异或操作,最终得出两位不同的数。

def singleNumbers(self, nums: List[int]) -> List[int]:res =0res1 =0for num in nums:res = res^num#此时res有两位为1diff =1while (res & diff) ==0:#寻找不同的位,如在第2位不同,则diff为1(对应二进制10)diff <<=1res =0for num in nums:if diff & num:#分别在第二位进行&操作,分为第二位为0的堆与第二位为1的堆。res = res^numelse:res1 = res1^numreturn [res, res1]

剑指offer: 数组中数字出现的次数(曾在滴滴校招面试中遇到过)、leetcode消失的数字相关推荐

  1. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  2. [剑指offer] 数组中只出现一次的数字

    本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...

  3. python剑指offer数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  4. 《剑指offer》第四十三题(从1到n整数中1出现的次数)

    // 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...

  5. 剑指offer:数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  6. 【排序】剑指offer:数组中重复的数字

    对数组进行排序,然后遍历判断,如果两个数相等,那么这两个数一定相邻 代码: class Solution { public:int duplicate(vector<int>& n ...

  7. 剑指offer 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  8. 剑指offer 数组中的逆数对

    链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...

  9. 挑战一天(12h)刷完《剑指offer》67题

    提前说明,挑战的人不是我. 大家周末好,我是爱上 B 站的小吴,最近一段时间我在网站 AlgoMooc 录制剑指 Offer 的视频,同时上传了一部分到 B 站,基于推荐算法,B 站疯狂的给我推送如何 ...

最新文章

  1. 2017校赛 问题 F: 懒人得多动脑
  2. Java InputStream详解
  3. asp.net中防止攻击的方法
  4. 输出10000内所有素数
  5. 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授
  6. Async/Await替代Promise的6个理由
  7. 我的架构设计~用层关系图说说mvc,mvvm,soa,ddd - 张占岭 - 博客园
  8. Two-Stream RNN/CNN for Action Recognition in 3D Videos-阅读笔记
  9. Spring Boot 针对 Java 开发人员的安装指南
  10. [P2396] yyy loves Maths VII
  11. 手把手教你写一个java的orm(二)
  12. 函数无法识别_Halcon OCR识别
  13. java双向链表结构_【Java数据结构】2.3双向链表的迭代实现
  14. java中dao和dao.impl_java 包 dao 和 dao.impl 问题
  15. 嵌入式软件测试环境搭建,基于DOORS的嵌入式软件测试环境需求管理
  16. Vue学习----第三天_webpack(学习webpack看这一篇就够了1.8w字)【6.7】
  17. 第五次作业:项目分类
  18. 生产日期当天算一天吗,保质期算当天吗 保质期最后一天算过期吗
  19. iOS - navigationController简单使用
  20. bootstrap ajax - (se7en框架)

热门文章

  1. 给定平面上的n个点,求最多有多少个点共线
  2. 百度网盘,到底限了谁的速?
  3. 2000 Followers-3D CSS text
  4. 吾生也有涯,而学也无涯
  5. 前端网络请求的错误处理
  6. fly.js 的二次封装
  7. win32应用程序_winxp不是有效的win32应用程序解决方法
  8. 6 数据的表现形式常量以及常量的几种类型
  9. MHA-node MHA-manger相关依赖包安装
  10. 智慧环卫管理系统方案