java算法4~交换两个整数,不能使用任何额外的变量
2016-11-28 13:20
323 查看
算法目的:交换两个整数;
算法要求:不使用任何额外的变量;
算法思路:使用位运算,异或操作。
实现如下:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package algorithm_database;
/**
*
* 交换两个整数,不使用任何额外的变量
*/
public class ChangeTwoInteger {
public static void main(String[] args){
int a = 4; //4就是0100
int b = 9; //9就是1001
a = a^b; //a就是1101 现在异或的结果1101就代表a和b的位不同的信息,这样写是因为算法实现有要求,不能用额外变量,否则用int c = a^b会好理解一点。
b = a^b; //b就是0100 为4,其实就是变成了当初的a
a = a^b; //a就是1001 为9,其实就是用b(即当初的a)异或1101得到最终的a(即当初的b)
System.out.println(a);
System.out.println(b);
}
}
算法要求:不使用任何额外的变量;
算法思路:使用位运算,异或操作。
实现如下:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package algorithm_database;
/**
*
* 交换两个整数,不使用任何额外的变量
*/
public class ChangeTwoInteger {
public static void main(String[] args){
int a = 4; //4就是0100
int b = 9; //9就是1001
a = a^b; //a就是1101 现在异或的结果1101就代表a和b的位不同的信息,这样写是因为算法实现有要求,不能用额外变量,否则用int c = a^b会好理解一点。
b = a^b; //b就是0100 为4,其实就是变成了当初的a
a = a^b; //a就是1001 为9,其实就是用b(即当初的a)异或1101得到最终的a(即当初的b)
System.out.println(a);
System.out.println(b);
}
}
相关文章推荐
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 剑指Offer——不用加减乘除求两个整数之和 + 不使用新的变量交换变量a,b
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 不用额外变量交换两个整数的值
- 位运算---不用额外变量交换两个整数的值
- 编写一个函数比较两个整数大小,但不能使用任何比较操作符
- 不使用第三个变量完成两个整数的交换
- 不用额外变量交换两个整数的值
- 不使用额外空间实现两个变量(int 型)的交换
- 不使用第三个变量实现两个整数之间的交换
- 不使用第三个变量完成两个整数的交换
- 如何不使用任何中间变量交换两个变量的值
- 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
- 面试题-不使用任何中间变量交换两个值的大小
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 不用额外变量交换两个整数的值
- 有两个变量a,b,不使用任何中间变量交换它们
- 不使用临时变量交换两个整数
- [Java,JS] - 不使用第三个变量完成两个整数的交换
- 不使用临时变量交换两个整数