136.137.260. Single Number && 位运算
136. Single Number

意思就是给你一堆数,每个数都出现了两次,只有一个数只出现了一次,找出这个数
位运算(和c艹一样)
&:按位与
|:按位或
^:异或(一样为0,不一样为1)
再说一下异或的性质,满足交换律和结合律
因此:
对于任意一个数n
n ^ 0 = n
n ^ n = 0
对于这道题来说,所有数依次异或剩下的就是那个数了
class Solution(object):
def singleNumber(self, nums):
ans = 0
for i in nums:
ans ^= i
return ans
127. Single Number II

意思就是所有的数都出现了三遍,只有一个数出现了一遍,求这个数
这个题没明白位运算怎么算的
对于给定数组nums,剔除所有重复元素后为nums',要求答案ans,则有sum(nums)*3 - sum(num) = 2 * ans
则有表达式(int)((3*sum(set(nums)) - sum(nums)) / 2)
class Solution:
def singleNumber(self, nums):
return (int)((3*sum(set(nums)) - sum(nums)) / 2)
260. Single Number III

给你一个数组,所有的数都出现了两边,有两个数出现了一遍,找出这两个数
思路是,只要把这两个数m,n分到不同的两组中,就转化为了第一个问题
对于这道题来说,不需要真正的找到这两个数,只需要找出不同就行了
我们先把所有数异或起来,那么结果就是m ^ n,那么我们找到这个m ^ n的lowbit(不知道的你或许该看看树状数组???)
那么m,n的lowbit一定不一样,所以lowbit为1的和m异或,lowbit为0的和n异或就完成了
那么我们不用管其他数,因为对于两个一样的数,他们的等价的lowbit上一定一样,所以势必会被分到同一组
这个看代码更容易理解
class Solution:
def singleNumber(self, nums):
A = 0
B = 0
diff = 0
length = len(nums)
for i in range(length):
diff ^= nums[i]
lowbit = diff & (-diff)
for i in range(length):
if (nums[i] & lowbit) != 0:
A ^= nums[i]
else:
B ^= nums[i]
return [A,B]
136.137.260. Single Number && 位运算的更多相关文章
- 136. Single Number(位运算)
Given a non-empty array of integers, every element appears twice except for one. Find that single on ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- leetcode 136 Single Number, 260 Single Number III
leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...
- LeetCode 260. Single Number III(只出现一次的数字 III)
LeetCode 260. Single Number III(只出现一次的数字 III)
- 137.Single Number II---位运算---《剑指offer》40
题目链接:https://leetcode.com/problems/single-number-ii/description/ 题目大意:给出一串数,每个数都出现三次,只有一个数只出现一次,把这个出 ...
- LeetCode(137) Single Number II
题目 Given an array of integers, every element appears three times except for one. Find that single on ...
- 【一天一道LeetCode】#260. Single Number III
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- [LeetCode] 260. Single Number III 单独数 III
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- 【刷题-LeeetCode】260. Single Number III
Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...
随机推荐
- Tomcat connecttimeout sessiontimeout
IIS中的会话超时和连接超时之间有什么区别? | Adept Technologies Inc.https://www.adepttech.com/blog/?p=825 IIS中的会话超时和连接超时 ...
- [新三板摘牌]国资企业济南华光光电去年终止拟IPO今年摘牌新三板
国资企业济南华光光电去年终止拟IPO今年摘牌新三板 http://blog.sina.com.cn/s/blog_e32cfa770102ycku.html http://stock.qlmoney. ...
- Java——scoket通讯
Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket是TCP/IP协议通信的抽象层,所以我们还需要了解TCP协议 传输层协议 TCP: ...
- Hbase数据结构模型
- Java多线程之Join方法阻塞线程
package org.study2.javabase.ThreadsDemo.status; /** * @Auther:GongXingRui * @Date:2018/9/19 * @Descr ...
- HTTP协议 - 基础认识
在http协议使用场景上我们最熟悉的可能就是浏览器了,作为本系列第一篇,就讲一个问题 ”浏览器怎么连接上服务器并获取网页内容的“ : 首先 浏览器怎么连接上服务器的? 如果对OSI七层模型或者TCP ...
- Spring validator常用注解
规则: 原版在这里 https://www.cnblogs.com/wjh123/p/8745473.html @AssertFalse Boolean,boolean 验证注解的元素值是false ...
- group by具有去重的功能
group by具有去重的功能
- hdu-2717(基础搜索bfs)
题意:给你n和k,问你n最少花费多少代价能得到k: 有两种变换:1.n++或者n--: 2.n=n*2: 两种代价每次的花费都是1: 思路:一维的bfs,每次入队三个点,一个是n+1,一个是n-1,一 ...
- BZOJ 1443 游戏(二分图博弈)
新知识get. 一类博弈问题,基于以下条件: 1.博弈者人数为两人,双方轮流进行决策.2.博弈状态(对应点)可分为两类(状态空间可分为两个集合),对应二分图两边(X集和Y集).任意合法的决策(对应边) ...