不重复int数组里找不存在的值
来源:互联网 发布:在端口 连接失败 编辑:程序博客网 时间:2024/06/04 18:26
有这么一道题,一个int数组叫A,里面的数是不重复的,从中拿出一个值,剩下的数组就B,问拿出的是哪个数。
一般人都能想到把A数组值相加,假设和为sum1,再把B数组值相加,设其和为sum2,sum1-sum2就是拿出的数。当初manager面我是,我就是这么回答的,心里还想怎么这么简单的题目还问(当时他出的int数组是从1到10的)。
其实这道题是有陷阱的啊,因为int数组值相加,可能会溢出!还好manager的数组是从1到10,不可能溢出。
对上面的方法有个改进的方法,就是对A中值相加时,每加一个值就减去B中的一个值,这样可以减少溢出的可能性。
但是改进过的方法还是有可能溢出,下面列出一个方法,不会有溢出:
离散数学里,大家都学过xor,异或,两个相同的值异或,值是0,两个不同的值异或,值是1,0和任何数异或都是那个数,0和0异或是0,0和1异或是1。
所以对于上面的题,我们定义一个int值,就叫xor吧,把A中每个值用循环异或一下赋以xor,再用xor去异或B中的每个值,做完后,xor就是拿出来的数。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int[] arr1 = new int[] { 1, 2, 3, 4, 5, 7, 8, 9, 10 };int xor = 0;//xor初值要为0for (int i = 0; i < arr.Length; i++){ xor = xor ^ arr[i]; }for (int i = 0; i < arr1.Length; i++){ xor = xor ^ arr1[i];}Console.WriteLine(xor);
异或还可以用于两个值交换,省交换空间,这个只是个技巧而已。
- 不重复int数组里找不存在的值
- 不改变数组里的数据查找数组的重复值
- 求数组里不存在的最小正整数
- 找数组中唯一重复的元素
- 数组中找重复的数字
- abbcad 找第一个不重复(重复)的字符
- 不重复随机数(int)
- 不重复随机数(int)
- js 数组删去重复的添加不存在的元素
- 找到数组里重复的数字
- 百度笔试题:找最小的不重复数
- 找字符串第一个不重复字符的一些方法
- 从JS数组中获取不重复的值
- 获取3个数组不重复的值
- 找数组中重复元素
- 在大数组中找重复和丢失的整数
- JavaScript找数组中重复出现过的元素
- 一道Java相关的小程序题(一个无序数组里有99个不重复正整数,范围从......)
- windows异常处理 __try __except
- 情景模式引擎 API
- 基于Hessian的高性能远程对象调用的服务器端和客户端的Demo
- linux convert图像处理命令
- C++ _try _catch()的妙处(收藏)
- 不重复int数组里找不存在的值
- 操作无法完成.键入的打印机名不正确,或者指定的打印机没有连接到服务器上
- 算法复杂度——时间复杂度和空间复杂度
- 常用的算法的时间复杂度和空间复杂度
- 分销-名词解释
- 每日领分之道
- 细说 ogre 中的材质脚本
- oracle按时间查询翻页时出现与前面一页重复数据
- Eclipse + CVS 之 如何将文件加入版本控制和脱离版本控制