博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版) Leetcode-645. 错误的集合
阅读量:4093 次
发布时间:2019-05-25

本文共 1115 字,大约阅读时间需要 3 分钟。

01 题目

链接:https://leetcode-cn.com/problems/set-mismatch

集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:

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

输出: [2,3]

注意:

给定数组的长度范围是 [2, 10000]。
给定的数组是无序的。

02 解析

^是位异或运算,对应的二进制位同为du0或同为1 结果为0 。(00为0,11为0,01和10为1)

比如 a = 2 b =1 对应的二进制为a = 10 b=01 ,进行^异或操作
所以 a^=b 即 a= a^b 也就是 10^01 = 11. 故a变成11

【这个总结的不错 https://leetcode-cn.com/problems/set-mismatch/solution/zhi-chu-xian-yi-ci-de-shu-xi-lie-wei-yun-suan-by-f/】

重复的数a, 丢失的数b

缺少的那个数b,由两个集合(true, 和nums)的差集得到
两个集合一块做^, 得到a ^ b的结果c, 已知b, c, 可以得到c ^ b =a
a ^ b = c =====》 c ^ b = a
时间复杂度: O(N), 空间复杂度: O(1)

03 代码

class Solution:    def findErrorNums(self, nums: List[int]) -> List[int]:        res = 0        length = len(nums)        err = sum(nums) - sum(set(nums))  # 重复                for n in nums:            res ^= n        for i in range(1, length+1):            res ^= i        rep = err ^ res        return [err, rep]

https://leetcode-cn.com/problems/set-mismatch/solution/zhi-guan-yi-dong-de-wei-yun-suan-by-clark-12/

Line 8-12:是什么意思?

转载地址:http://aujii.baihongyu.com/

你可能感兴趣的文章
什么是协议类
查看>>
获得屏幕尺寸
查看>>
基于TCP和多线程实现无线鼠标键盘-InputMethodManager
查看>>
252. Meeting Rooms
查看>>
MahApps.Metro样式
查看>>
通过给程序里嵌入manifest,使得程序运行时弹出UAC窗口
查看>>
是否可以通过绝对内存地址进行参数赋值与函数调用---转载
查看>>
django区别对待127.0.0.1和localhost?
查看>>
access restriction
查看>>
C#打造51CTO自动签到服务领取无忧币之开篇
查看>>
【.net 深呼吸】通过标准输入/输出流来完成进程间通信
查看>>
快速排序c++实现 快排C++代码实现
查看>>
设备树学习:内核对设备树的处理
查看>>
SpringCloud Hystrix实现容错和回退
查看>>
HTTP协议
查看>>
Java获取用户的输入
查看>>
杭电 1568 NYOJ 461 Fibonacci
查看>>
FOJ 2077 有奖月赛题
查看>>
(转)WEB服务器_IIS配置优化指南
查看>>
函数之作用域的查找顺序
查看>>