政务服务网站建设资金,好看的广告图片,.net开发大型网站开发,汕头定制网站建设有这么一道题#xff0c;一个int数组叫A#xff0c;里面的数是不重复的#xff0c;从中拿出一个值#xff0c;剩下的数组就B#xff0c;问拿出的是哪个数。 一般人都能想到把A数组值相加#xff0c;假设和为sum1#xff0c;再把B数组值相加#xff0c;设其和为sum2一个int数组叫A里面的数是不重复的从中拿出一个值剩下的数组就B问拿出的是哪个数。 一般人都能想到把A数组值相加假设和为sum1再把B数组值相加设其和为sum2sum1-sum2就是拿出的数。当初manager面我是我就是这么回答的心里还想怎么这么简单的题目还问当时他出的int数组是从1到10的。 其实这道题是有陷阱的啊因为int数组值相加可能会溢出还好manager的数组是从1到10不可能溢出。 对上面的方法有个改进的方法就是对A中值相加时每加一个值就减去B中的一个值这样可以减少溢出的可能性。 但是改进过的方法还是有可能溢出下面列出一个方法不会有溢出 离散数学里大家都学过xor异或两个相同的值异或值是0两个不同的值异或值是10和任何数异或都是那个数0和0异或是00和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;for (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); 异或还可以用于两个值交换省交换空间这个只是个技巧而已。转载于:https://www.cnblogs.com/iwteih/archive/2010/03/16/1687230.html