关于在n-1的数组中找到那个被减去的数及异或与位与
2015-04-01 13:57
405 查看
// 有1到N共 n-1个数,问少了哪个数
// 有序数组(如果是无序数组那么将a[i] 移动至 a[a[i]] 这样子就成功排序了)
//其实可以采用byte数组的来做,感觉会更快
//当然,这个更多的是用在1-n 共n+1个数,问多出来的那个数是多少?这个时候可以不确认一下N是多少,然后,连续的每4个数异或出来的结果为0,这样即省去了数组的开销
下面为测试代码
// 有一组数,中间有两个数的出现次数为奇数次,问是哪两个数
// 采用异或运算来进行交换位置
//不借助于第三个数
// 有序数组(如果是无序数组那么将a[i] 移动至 a[a[i]] 这样子就成功排序了)
//其实可以采用byte数组的来做,感觉会更快
//当然,这个更多的是用在1-n 共n+1个数,问多出来的那个数是多少?这个时候可以不确认一下N是多少,然后,连续的每4个数异或出来的结果为0,这样即省去了数组的开销
public static void lessOne(int[] a) { int fruit = 0; int count = 0; for (int i = 0; i < a.length; i++) { count++; fruit ^= a[i]; if (count == 4) { if (fruit == 0) { count = 0; } else { System.out.println("Less is:" + i); break; } } } }
下面为测试代码
int[] a = new int[100]; for (int i = 0; i < a.length; i++) { if (i == 67) continue; a[i] = i; } //也可以使用已提供的方法进行排序,但不建议 //Arrays.sort(a); lessOne(a);
// 有一组数,中间有两个数的出现次数为奇数次,问是哪两个数
public static void lesstwoj() { int[] a = { 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8 }; int sum = 0; for (int i : a) { sum ^= i; } int count = 0; int temp = sum; while ((temp & 1) == 0) { temp >>= 1; count++; } int one = 0; for (int i : a) { if (((i >> count) & 1) != 0) { one ^= i; } } int sec = sum ^ one; System.out.println("one:" + one);//第一个数 System.out.println("sec:" + sec);//第二个数 }
// 采用异或运算来进行交换位置
//不借助于第三个数
public static void swap(int a, int b) { if (a != b) { a = a ^ b; b = a ^ b; a = a ^ b; } System.out.println("one-- a:" + a + " b:" + b); }
相关文章推荐
- 【leetcode】在一堆每个数字都出现三次的数组中,找到那个只出现一次的数(Single Number II)
- 关于字符数组异或换位后数据类型的注意
- java 找到数组中出现次数超过数组长度一半的那个数字
- 给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
- 关于jQuery.inArray(),字符串数组中不可能找到数字问题
- 工具类:关于如何找到两个List数组中不同的数据的算法!
- 阿里2015笔试附加题-一个数组中存在一组数字,其中有一个数字重复3遍,其他2遍,在O(1)空间找到那个重复3次的数
- 给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
- 找到唯一的那个数——对于异或运算的研究
- 每天一道LeetCode-----给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现多次,找到重复的那个
- 关于水王的题目——找到出现次数大于/等于数组长度一半的数
- 找到一个数组里出现最多次数的那个数
- 在一个数组或字符串中找到出现频率最高的那个元素的方法
- 关于数组和arraylist的随笔
- [转]关于数组的几道面试题
- 关于将数组地址赋给指针的问题
- 一道关于返回指针和返回数组名的面试题
- 近两日关于数组名与指针学习汇总
- 关于ipad右下角的那个隐藏键盘回收按钮
- 关于数组的复习以及定义一个类(关于内存的理解)