位运算第一弹

简介: 位运算第一弹

1.基础位运算

191 338 461

<<   左移

&按位与      有0就是0

>>   右移

||按位或      有1就是1

~     按位取反

^按位异或  

相同为0,不同为1,无进位相加(正常1+1是前进,但是他不进行进位)

位运算的优先级,能加括号,就加括号,这样最不容易出错

这个取反,相当于是个简单操作,就是开始把所有都是0,然后把1放在x的位置,然后,再一个取反。

位图的思想

异或运算的运算律

a^0=a

a^a=0

a^b^c=a^(b^c)

偶数全部会被干掉,只剩一个奇数

引入题目

力扣136.只出现一次的数字

这题的审题,首先看他是只有一个数字是单独一个的,其他的数字都是两个

异或的本质就是相加的时候,不去进位,相当于消消乐,偶数就消去

class Solution {
    public int singleNumber(int[] nums) {
      int ret=0;
      for(int x:nums){
          ret=ret^x;
      }
      return ret;
    }
}

力扣260.只出现一次的数字III

     s = 101100
    ~s = 010011
(~s)+1 = 010100 // 根据补码的定义,这就是 -s   效果:s 的最右侧的1(也叫最低位)左侧取反,右侧不变
s & -s = 000100 // lowbit
    
链接:https://leetcode.cn/problems/single-number-iii/solutions/2484352/tu-jie-yi-zhang-tu-miao-dong-zhuan-huan-np9d2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先先导入知识

这个题解说的很细,很吊

首先:他不可能最后异或的结果全部是0,因为有两个不同的数字,所以,最后肯定有一个数是1,那么就肯定是有一个是0,有一个是1。

那么假如极端点,全部都是1,比如1111

例如0000^1111其他的我们不去关注,因为全部都会出现两个。

所以我们都使用这个保留最后一个1的方式。

然后我们进行什么操作呢?

->把最后那个为1的位,我们进行分组,因为最后是1,所以那两个单独的肯定是一个0,一个1,其余的我们不用操心,我总是担心什么出现5个1,3个0,但是这么想没有必要,到最后还是

分组成0和1,最后我们用这个&来分组,把那个位置为0的和为1的区分开来,哪怕只有一个是0,有999个1,那也是区分开来,然后有一个是单独的。

class Solution {
    public int[] singleNumber(int[] nums) {
    int[]ret=new int[2];
    Arrays.sort(nums);
    int m=0;
    int count=0;
   for(int x:nums){
       m=m^x;
   }
   int lowbit=m&-m;
   for(int x:nums){
       ret[(lowbit & x)== 0?0:1]^=x;
   }
    return ret;
    }
}


相关文章
|
Java 计算机视觉
Java调用opencv图片矫正
Java调用opencv图片矫正
1018 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能基本概念和原理
人工智能基本概念和原理
1068 1
|
Java 容器
阿里内部流传的JDK源码剖析手册!GitHub已获上千万的访问量
相信现在已经有很多小伙伴知道了“微软”要对JDK下手了! JDK是什么? jdk是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。jdk是整个java开发的核心,它包含了JAVA的运行环境和JAVA工具。相对而言,没有jdk的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
421 0
|
JavaScript 测试技术 Python
低成本、快速造测试数据,这个造数工具我后悔推荐晚了!
没有测试数据,所谓的功能测试和性能测试全都是无米之炊。但我发现一个蛮诡异的事情,就是行业内很少会有人去强调测试数据的重要性,甚至市面上都没有人在做测试数据这门生意。
低成本、快速造测试数据,这个造数工具我后悔推荐晚了!
|
9月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
9月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
346 13
|
11月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
JavaScript 安全 前端开发
TypeScript 基础学习笔记:interface 与 type 的异同
TypeScript 基础学习笔记:interface 与 type 的异同
236 0
|
11月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
169 1
|
算法 安全 Java
(七)JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC日志剖析
在《GC基础篇》中曾谈到过分代以及分区回收的概念,但基础篇更多的是建立在GC的一些算法理论上进行高谈阔论,而本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器、并行收集器、三色标记、SATB算法、GC执行过程、并发标记、CMS收集器等知识,本篇则偏重于分析GC机制的落地实现,也就是垃圾收集器(Garbage Collector)。
550 8