位运算-查找数组中唯一成对的数

基础实例一使用位运算判断数的奇偶性

  实例代码:

public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}//  与运算public static boolean isOdd(int i){return (i & 1) != 0;   // 奇数最后一位二进制为 1,偶数最后一位二进制为 0}
}

基础实例二:位运算判断一个数转为二进制后的第i位数是0还是1

  实例代码:

public class Test {public static void main(String[] args) {
        // 与运算  int x = 85;System.out.println("x的第五位二进制位的数为:" + ((((x&(1<<4))>>4)==1)?"1":"0"));// 比如85的二进制为1010101,我们将它的二进制与1向左移4位来做与运算// 就是 1010101 & 0010000 得出结果0010000 再右移4位 即可得出结果} }

基础实例三:位运算交换两个整数变量的值

  实例代码:

public class Test {// 异或运算public static void main(String args[]){int a=10;int b=20;a=a^b;b=b^a;a=a^b;System.out.println(a+"\t"+b);// 异或运算性质 x ^ x ^ y == y,因为x ^ x == 0,0 ^ y == y}
}

基础实例四:使用位运算,不用判断语句,求整数的绝对值

  实例代码: 

public class Test {// 异或运算public static void main(String args[]){System.out.println(my_abs(-53));System.out.println(my_abs(53));}public static int my_abs(int a){/*** 对一个数进行位运算,是在这个数的补码上运行的* 正数的补码是原码,负数的补码为原码除了最高的符号为,取反,然后加一* int 型,先右移31位取符号位 如果a位正数,i=0;a为负数,i=-1* 一个数与-1即与0xFFFFFFFF异或就相当与取反* 因此,a与i异或后再减i(因为i为0或-1,所以减i即是要么加0要么加1)也可以得到绝对值*/int i = a >> 31;return ((a ^ i) -i);}
}

异或运算特点:

  

题目一:找出唯一成对的数

  1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?

  解题思路:这里使用的原理是连续的数字异或可以消除重复,A ^ A=0,( A ^ A ) ^ B ^ ( C ^ C ) =B,但是我们的题目有两个元素重复,假如使用一次异或那么这个重复的元素就会被消掉了。所以这里有一个小技巧,就是使用两次异或,先对不包含重复值数组进行异或,在对包含重复值的数组进行异或,这样下来,就相当于除了重复值每个值都异或了两次,而重复的值异或了三次,这样异或下来,就只剩一个重复的值了,就成功找出来了。为了方便测试,这里只使用了11个元素的数组,自行改成1001即可(示例代码也给出了使用辅助存储空间的解法)。这里有一个特殊的点,就是这里给出了数组是1-1000连续的数并且只有唯一一个元素值重复,所以才能构造进行异或两次的解法。

  实例代码:

import java.util.Random;public class 唯一成对的数 {public static void main(String[] args) {int N = 11;int [] arr = new int[N];for (int i = 0; i < arr.length-1; i++) {arr[i] = i+1;}// 最后一个数,是随机数arr[arr.length-1] = new Random().nextInt(N-1)+1;// 随机下标int index = new Random().nextInt(N);swap(arr, index, arr.length-1);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+ "  ");}System.out.println();int x1=0;for(int i=1;i <= N -1;i++){x1 = (x1^i);   // 求得1到N-1这些连续的数的异或}for(int i=0;i < N ;i++){x1 = (x1^arr[i]);  // 再与原来的数组arr异或,这样重复的数就有三个,不重复的数有两个,异或消除重复后,剩下的就是重复的数了}System.out.println(x1);System.out.println("使用辅助空间实现============");int []helper = new int[N];for (int i = 0; i < helper.length; i++) {helper[arr[i]]++;}for (int i = 0; i < helper.length; i++) {if (helper[i]==2) {System.out.println(i);break;}}}public static void swap(int[] array,int x,int y){int xx = array[x];int yy = array[y];array[x] = yy;array[y] = xx;}}

  运行结果:

    

题目二:找出落单的那个数

  一个数组里除了某一个数字之外,其他的数字都出现了两次。请写出程序找出这个只出现一次的数字。

  解题思路:这个题目经过上一个题目的学习,就很简单了,直接进行异或即可。

  实例代码:

public class Test {// 异或运算public static void main(String args[]){int []a = {1,1,2,2,3,4,3};int x1 = 0;for (int i = 0; i < a.length; i++) {x1 = x1 ^ a[i];}System.out.println(x1);}
}

  

 

  

 

转载于:https://www.cnblogs.com/xiaoyh/p/10247283.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、创建一个xcode工程&#xff0c;single View就行&#xff0c;项目语言选择swift&#xff0c;oc的直接生成就行不用这么麻烦。 2、把跟目录上创建 node的package.json,执行命令 npm init npm install react-nati…

第二阶段站立会议08

站立会议内容&#xff1a; 大家准备继续将代码进行融合&#xff0c;进行测试对一些功能进行优化。 1、会议照片&#xff1a; 2、任务展板&#xff1a; 3、燃尽图&#xff1a; 转载于:https://www.cnblogs.com/smcoder/p/7002539.html

git——学习笔记(三)分支管理

一、创建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳时间线&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一条分支&#xff0c;分支就像指针一样&#xff0c;合并、删除分支时&#xff0c;修改的都是指针…

阿里巴巴是如何打通 CMDB,实现就近访问的?

CMDB在企业中&#xff0c;一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性&#xff0c;例如机器的IP、主机名、机房、应用、region等&#xff0c;这些数据一般会在机器…

[原创]K8_C段旁注工具6.0 新增SMB漏洞扫描

工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2017/5/24 13:25:54简介: 图片: 功能: 更新历史:6.0 20170510[] C段SMB漏洞扫描(探测系统版本)[] 批量操作-文本比较提取新增内容[] 旁注查…

【公告】社区周刊即日起停刊

各位订阅51CTO社区周刊的小伙伴们&#xff0c;大家好&#xff0c;我是51CTO社区的大管家蘑菇&#xff0c;今天来是想跟大家说&#xff0c;本期周刊将是我们最后一期邮件期刊&#xff0c;没错&#xff0c;是最后一期&#xff08;请珍惜它~&#xff09;。或许你会问&#xff0c;停…

springcloud-zuul路由网关

路由网关(zuul) 在微服务架构中&#xff0c;需要多个基础的服务治理组件&#xff0c;包括服务注册与发现、服务消费、负载均衡、断路器、智能 路由、配置管理等&#xff0c;由这个基础组件相互协作&#xff0c;共同组建了一个简单的微服务系统。一个简单的微服务系统如下 图 总…

python DB.fetchall()--获取数据库所有记录列表

查询到的数据格式为列表&#xff1a; 多个元素的列表&#xff1a; 单个元素的列表&#xff1a; 转载于:https://www.cnblogs.com/apple2016/p/5734161.html

Laravel Composer 命令大全

2019独角兽企业重金招聘Python工程师标准>>> ​​​​​​​1、安装 Laravel composer create-project --prefer-dist laravel/laravel 5.xx user-project 2、.env 文件操作 生成 APP_KEY&#xff1a;php artisan key:generate 缓存 .env 配置&#xff…

linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析

1&#xff0e;什么是 Initrdinitrd 的英文含义是 boot loaderinitialized RAM disk&#xff0c;就是由 boot loader 初始化的内存盘。在 linux内核启动前&#xff0c; boot loader 会将存储介质中的 initrd 文件加载到内存&#xff0c;内核启动时会在访问真正的根文件系统前先访…

VBS基础篇 - 常量

VBS基础篇 - 常量 常量&#xff1a;指的是在程序运行过程中其值保持不变的量&#xff0c;它用来保存固定不变的数值&#xff0c;字符串等常数 。 常量的定义&#xff1a;在vbscript中使用使用 Const 指令可以创建名称具有一定含义的字符串型或数值型常量&#xff0c;并给它们赋…

利用深度学习来预测股票价格变动

https://www.toutiao.com/i6644852565341110791/ 利用深度学习来预测股票价格变动&#xff08;长文&#xff0c;建议收藏&#xff09; 原创 不靠谱的猫 2019-01-10 21:01:39完整架构概述 在这篇文章中&#xff0c;我将创建一个预测股票价格变动的完整过程。我们将使用生成对抗网…

shell 本地接口自动化

一.基于http/https的接口 一般情况下&#xff0c;当前大多公司在做接口自动化的时候都会使用一些工具&#xff1b;比如&#xff1a;postman/jmeter/python自研开发接口平台。。。 以上的情况&#xff0c;都是在源码与测试使用分离的情况下实践的。也就是说&#xff1a;目前国内…

第50次二级c语言真题,2006年4月全国计算机等级考试二级C语言笔试试卷含答案

一、选择题((1)一(10)每题2分&#xff0c;(11)一(50)每题1分&#xff0c;共60分)下列各题A)、B)、C)、D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置上&#xff0c;答在试卷上不得分。(1)下列选项中不属于结构化程序设计方法的是…

python hashlib模块

摘要算法简介 Python的hashlib提供了常见的摘要算法&#xff0c;如MD5&#xff0c;SHA1等等。 什么是摘要算法呢&#xff1f;摘要算法又称哈希算法、散列算法。它通过一个函数&#xff0c;把任意长度的数据转换为一个长度固定的数据串&#xff08;通常用16进制的字符串表示&…

go tool trace goalng调优工具

为什么80%的码农都做不了架构师&#xff1f;>>> 你想知道你的Go程序在做什么吗&#xff1f; go tool trace 可以向你揭示&#xff1a;Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时&#xff08;如延迟&#xff0c;并行化和竞争异常…

程序员 文本编辑器 c语言,程序员必备的五款文本编辑器

原标题&#xff1a;程序员必备的五款文本编辑器程序员的工作离不开文本编辑器&#xff0c;有人说一个txt就能搞定&#xff0c;但txt面对如今复杂的要求&#xff0c;明显有些捉襟见肘&#xff0c;下面推荐五款超级好用的文本编辑器及搭配软件&#xff0c;绝对是程序员的大爱。程…

PCH文件的创建和配置

1.PCH文件的的创建 (1)CommandN (2)打开新建文件窗口:ios->other->PCH file&#xff0c;创建一个pch文件 2.PCH文件的配置 (1)在工程的TARGETS里边Building Setting中搜索Prefix Header (2)然后在Precompile Prefix Header下边的Prefix Header右边双击&#xff0c;添加刚…

android限制输入字符的范围,Android EditText 对输入字数和内容范围进行限制

在做定制机时&#xff0c;对光敏值进行范围控制时&#xff0c;以及对区号输入时遇到对输入字数以及输入内容的显示。找了好多方法&#xff0c;终于找到了几种方法其中EditText的addTextChangedListener功不可没。例如对光敏值要在0到61之间。大于61时要在输入框中自动变为61.代…

Sass:一种CSS预处理器语言

http://sass-lang.com/ Sass是一种CSS预处理器语言&#xff0c;通过编程方式生成CSS代码。因为可编程&#xff0c;所以操控灵活性自由度高&#xff0c;方便实现一些直接编写CSS代码较困难的代码。 同时&#xff0c;因为Sass是生成CSS的语言&#xff0c;所以写出来的Sass文件是不…