博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法14-----位运算操作(1)
阅读量:6597 次
发布时间:2019-06-24

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

1、应用技巧1:与&【消除x(二进制)最后一位1】

def checkPowerof2(x):    return x>0 and x&(x-1)==0

应用三:判断n是否为4的幂:

def isFour(n):    m=1    while m

 

 

2、应用技巧2:子集

// Non Recursionclass Solution {    /**     * @param S: A set of numbers.     * @return: A list of lists. All valid subsets.     */    public List
> subsets(int[] nums) { List
> result = new ArrayList
>(); int n = nums.length; Arrays.sort(nums); // 1 << n is 2^n // each subset equals to an binary integer between 0 .. 2^n - 1 // 0 -> 000 -> [] // 1 -> 001 -> [1] // 2 -> 010 -> [2] // .. // 7 -> 111 -> [1,2,3] for (int i = 0; i < (1 << n); i++) { List
subset = new ArrayList
(); for (int j = 0; j < n; j++) { // check whether the jth digit in i's binary representation is 1 if ((i & (1 << j)) != 0) { subset.add(nums[j]); } } result.add(subset); } return result; }}

 

3、应用技巧3:异或

 

java代码:

public class Solution {    public int singleNumber(int[] nums) {        int ones = 0, twos = 0;        for(int i = 0; i < nums.length; i++){            ones = (ones ^ nums[i]) & ~twos;            twos = (twos ^ nums[i]) & ~ones;        }        return ones;    }}

public class Solution {    public int[] singleNumber(int[] nums) {        //用于记录,区分“两个”数组        int diff = 0;        for(int i = 0; i < nums.length; i ++) {            diff ^= nums[i];        }        //取最后一位1        //先介绍一下原码,反码和补码        //原码,就是其二进制表示(注意,有一位符号位)        //反码,正数的反码就是原码,负数的反码是符号位不变,其余位取反        //补码,正数的补码就是原码,负数的补码是反码+1        //在机器中都是采用补码形式存        //diff & (-diff)就是取diff的最后一位1的位置        diff &= -diff;                int[] rets = {0, 0};         for(int i = 0; i < nums.length; i ++) {            //分属两个“不同”的数组            if ((nums[i] & diff) == 0) {                rets[0] ^= nums[i];            }            else {                rets[1] ^= nums[i];            }        }        return rets;    }}

 

转载于:https://www.cnblogs.com/Lee-yl/p/9006028.html

你可能感兴趣的文章
牛津词典 2018 年度词汇 ——「有毒」!
查看>>
Android Arcface人脸识别sdk使用工具类
查看>>
android studio单个工程文件的代理设置
查看>>
我的友情链接
查看>>
一行命令获取当前JVM所有可设置的参数以及当前默认值
查看>>
Linux mint 14下的powerDNS+mysql+powerAdmin搭建个性DNS域名解析服务器
查看>>
Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
查看>>
unbantu安装 mysql --- 百度云
查看>>
JS中的默认行为
查看>>
从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁
查看>>
selenium层级定位及鼠标键盘操作
查看>>
SpringBoot跨域问题解决方案
查看>>
(转载)hibernate3.0配置文件模板
查看>>
46、练习:输出指定目录下的所有文件名称
查看>>
IP地址与数字地址相互转换
查看>>
字符串连接[不用库函数]
查看>>
新建一个express工程,node app无反应
查看>>
OCM_第十一天课程:Section5 —》数据仓库
查看>>
水晶报表
查看>>
cogs 539. 牛棚的灯
查看>>