
位运算
也非野人
这个作者很懒,什么都没留下…
展开
-
交换练习
请编写一个算法,不用任何额外变量交换两个整数的值。给定一个数组num,其中包含两个值,请不用任何额外变量交换这两个值,并将交换后的数组返回。测试样例:[1,2]返回:[2,1]思路:用异或解决代码如下:public int[] getSwap(int[] num) { // write code here nu原创 2016-06-30 20:37:12 · 329 阅读 · 0 评论 -
比较练习
对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。给定两个整数a和b,请返回较大的数。测试样例:1,2返回:2思路:用异或的办法,先用>>31来得到符号位,a-b>0 则表示为1代码如下:public static void main(String[] args) {原创 2016-06-30 20:41:21 · 384 阅读 · 0 评论 -
寻找奇数出现
有一个整型数组A,其中只有一个数出现了奇数次,其他的数都出现了偶数次,请打印这个数。要求时间复杂度为O(N),额外空间复杂度为O(1)。给定整形数组A及它的大小n,请返回题目所求数字。测试样例:[1,2,3,2,1],5返回:3思路:异或^的条件是相同为0,不同为1;设n=0;则n=n^a=a,如果出现同样的,则n=n^a=0;只有一个就只会值是那一个代原创 2016-06-30 20:45:28 · 352 阅读 · 0 评论 -
寻找奇数出现II
给定一个整型数组arr,其中有两个数出现了奇数次,其他的数都出现了偶数次,找到这两个数。要求时间复杂度为O(N),额外空间复杂度为O(1)。给定一个整形数组arr及它的大小n,请返回一个数组,其中两个元素为两个出现了奇数次的元素,请将他们按从小到大排列。测试样例:[1,2,4,4,2,1,3,5],8返回:[3,5]思路:先用int e去用异或去得到e,这个原创 2016-06-30 20:55:04 · 434 阅读 · 0 评论