经典算法面试题(一):两数交换的三种方法
来源:互联网 发布:搞怪软件有哪些 编辑:程序博客网 时间:2024/05/29 16:25
代码实现:
public class SwapDemo { private static void swap1(int[] a) { int temp = a[0]; a[0] = a[1]; a[1] = temp; } private static void swap2(int[] a) { a[0] = a[0] + a[1]; a[1] = a[0] - a[1]; a[0] = a[0] - a[1]; } private static void swap3(int[] a) { a[0] ^= a[1]; a[1] ^= a[0]; a[0] ^= a[1]; } public static void main(String[] args) { int[] a = {11, 22}; System.out.println("交换前:a[0] = " + a[0] + "," + "a[1] = " + a[1]); swap1(a); System.out.println("第1次交换后:a[0] = " + a[0] + "," + "a[1] = " + a[1]); swap2(a); System.out.println("第2次交换后:a[0] = " + a[0] + "," + "a[1] = " + a[1]); swap3(a); System.out.println("第3次交换后:a[0] = " + a[0] + "," + "a[1] = " + a[1]); }}
运行结果:
交换前:a[0] = 11,a[1] = 22第1次交换后:a[0] = 22,a[1] = 11第2次交换后:a[0] = 11,a[1] = 22第3次交换后:a[0] = 22,a[1] = 11
知识点:
按位与运算规则:0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1
按位或运算规则:0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1
按位异或运算规则:0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0
按位取反运算规则:~0 = 1; ~1 = 0
注意:如果是两个很大的数,采用第2种方法交换的过程中,有可能会出现溢出现象,但结果是对的。
验证代码:
public class SwapDemo { private static void swap(int[] a) { a[0] = a[0] + a[1]; System.out.println("a[0] = " + a[0] + "," + "a[1] = " + a[1]); a[1] = a[0] - a[1]; System.out.println("a[0] = " + a[0] + "," + "a[1] = " + a[1]); a[0] = a[0] - a[1]; System.out.println("a[0] = " + a[0] + "," + "a[1] = " + a[1]); } public static void main(String[] args) { int[] a = {2147483647, 2147483646}; System.out.println("交换前:a[0] = " + a[0] + "," + "a[1] = " + a[1]); swap(a); System.out.println("交换后:a[0] = " + a[0] + "," + "a[1] = " + a[1]); System.out.println(); a[0] = 2147483647; a[1] = 1; System.out.println("交换前:a[0] = " + a[0] + "," + "a[1] = " + a[1]); swap(a); System.out.println("交换后:a[0] = " + a[0] + "," + "a[1] = " + a[1]); }}
运行结果:
交换前:a[0] = 2147483647,a[1] = 2147483646a[0] = -3,a[1] = 2147483646a[0] = -3,a[1] = 2147483647a[0] = 2147483646,a[1] = 2147483647交换后:a[0] = 2147483646,a[1] = 2147483647交换前:a[0] = 2147483647,a[1] = 1a[0] = -2147483648,a[1] = 1a[0] = -2147483648,a[1] = 2147483647a[0] = 1,a[1] = 2147483647交换后:a[0] = 1,a[1] = 2147483647
阅读全文
0 0
- 经典算法面试题(一):两数交换的三种方法
- 关于两数交换三种方法的思考
- 实现两数 交换的三种不同编程方法。
- 数据交换的特殊算法--经典面试题
- 经典面试题-- 排序算法(一)
- 交换两个数的两种方法
- 经典的SQL面试题(三)
- 交换两个数的三种方法
- 两个数交换的三种方法
- 交换两个数的三种方法
- 交换两个数的三种方法
- 交换两个数的三种方法
- 两个数交换的三种方法
- 经典的SQL面试题(一)
- 【面试题】判断回文数-两种方法实现
- 经典面试题(三)
- 经典算法面试题(三):小猪吃米
- 经典算法——不用第三变量交换两数
- Day1
- HDU 3038
- jvm配置分析
- Asp.Net Core Mvc上Json序列化首字母大小写的问题
- 四种方案解决ScrollView嵌套ListView问题
- 经典算法面试题(一):两数交换的三种方法
- win7第一个caffe实验【识别人脸年龄和性别】
- mysql配置版本安装遇到的坑!
- 全栈工程师之路-中级篇之小程序开发-入门教程完结报告
- Netty4实战第三章:Netty基础
- 【原】React Native踩坑系列之-安卓真机无法打开控制菜单
- Privacy Policy
- js获取页面元素距离浏览器工作区顶端的距离
- eclipse和myeclipse新建web项目,默认输出文件夹问题