面试编程题拾遗(02) --- 寻找多出来的元素
2013-12-09 00:33
344 查看
题目:有两个数组a和b,其中b有一个元素是a没有的,其他元素都相同,请找出b中这个多余的元素。
利用位运算中异或运算的特点,两个相同的数异或的结果一定是0,那么将a和b中的所有元素做一次异或运算,最终的结果就是b比a多出的那个元素的值。
事实上,利用异或运算的这个性质可以做一个简单的对称加密(加密和解密使用相同的密钥(私钥)),比如可以将字符串“我爱你”加密为“抺犚俋”(密钥为0xAB),当然也可以用此密钥对加密后的字符串再进行一次异或运算还原出“我爱你”,代码如下所示:
public class Test02 { public static void main(String[] args) { int[] a = {11, 34, 9, -4, 100, 98}; int[] b = {34, 55, 11, 9, 100, -4, 98}; int c = 0; for(int i = 0; i < a.length; i++) { c ^= a[i] ^ b[i]; } c ^= b[b.length - 1]; System.out.println(c); } }
利用位运算中异或运算的特点,两个相同的数异或的结果一定是0,那么将a和b中的所有元素做一次异或运算,最终的结果就是b比a多出的那个元素的值。
事实上,利用异或运算的这个性质可以做一个简单的对称加密(加密和解密使用相同的密钥(私钥)),比如可以将字符串“我爱你”加密为“抺犚俋”(密钥为0xAB),当然也可以用此密钥对加密后的字符串再进行一次异或运算还原出“我爱你”,代码如下所示:
public class Test02 { public static void main(String[] args) { String s = "我爱你"; int key = 0xAB; String temp = ""; for(int i = 0, len = s.length(); i < len; i++) { temp += (char)(s.charAt(i) ^ key); } System.out.println(temp); } }
相关文章推荐
- 面试编程题拾遗(03) --- 删除有序数组中的重复元素
- 编程之美 2.12 快速寻找满足条件的两个数 解法三证明 (算法导论 第二版 2.3-7 在n个元素的集合S中找到两个和为x的元素)
- 笔试or面试——寻找单链表倒数第n个元素
- 【编程习题★★★☆☆】寻找数组中元素间最大差值
- 面试编程题拾遗(01) --- 不用算术运算符完成两个数求和
- java-两个数组,寻找多出来的元素
- 编程之美--寻找发帖水王(即:求数组主元素)
- 编程菜鸟的日记-初学尝试编程-寻找等长数组A与B(所含元素相同,顺序不同)相匹配的元素即a[i]=b[j]
- 面试编程题拾遗(04) --- 上楼梯有多少种方式
- 求大数组中只出现了一次的两个数====面试时一时想不出来的一个题目,在编程之美上看到过的
- 面试编程题拾遗(06) --- 打印n对括号的全部有效组合
- JavaScript的DOM编程--02--获取元素节点
- jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元素过滤器(*),追加方法,节点,样式操作)
- jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元素过滤器(*),追加方法,节点,样式操作)
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 【面试编程题】巧妙排序:排序只有1,2,3三个元素的数组,不能统计1,2,3的个数。
- 面试中的智力题及编程实践
- 软件开发者面试百问-----怎样找出链表中间的元素?
- 面试一些简单的编程题目
- 【程序猿笔试面试解题指南】寻找最小的k个数