zoukankan      html  css  js  c++  java
  • leetcode刷题——一些算法技巧总结2.0

    1. 异或、与的一点总结(这些位运算真的是骚操作2333)

      • 两个相同的数字:a^a=0

      • 取出一个数最右端为1的那一位:a &=-a

        其中-a是在计算机中就是a的补码表示(这样所有的加法运算可以使用同一种电路完成),因为补码等于原码的反码+1,所以a&-a就是a最右边一位为1,其他位为0的数

        另外:~a = -a-1

        	已知负数的补码,求其原码:左右找1,此两1不变,中间取反。
        
      • x&x-1 ==0

        -判断 是否是2的n次方。

        -把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

      • x&1 最低位二进制数,可以用来判断奇偶

      • 一个数字除以2 x>>1效率更高

    2. 利用逻辑与&&的短路原理,可以实现类似if判断的功能。

      例如:实现1+2+3+……+n

      //1.需利用逻辑与的短路特性实现递归终止。 2.当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0;
      //3.当n>0时,执行sum+=Sum_Solution(n-1),实现递归计算Sum_Solution(n)。
          public int Sum_Solution(int n) {
              int sum = n;
              boolean ans = (n>0)&&((sum+=Sum_Solution(n-1))>0);
              return sum;
          }
      
    3. 利用&^实现加法

         public int Add(int num1,int num2) {
              while(num2!=0){
                  int tmp=num1^num2;
                  num2=(num1&num2)<<1;//进位
                  num1=tmp;
              }
              return num1;
          }
      
  • 相关阅读:
    Map
    Collection接口之Set
    Collection接口之List、泛型
    简介
    递归
    File类
    转换流InputStreamReader、OutputStreamWriter
    springmvc
    集合
    SpringCloud学习笔记
  • 原文地址:https://www.cnblogs.com/zlting/p/10168456.html
Copyright © 2011-2022 走看看