Moderate Swap不用临时变量 @CareerCup

原创 2013年12月02日 06:27:40

经典Swap问题,注意用异或时,不同让两个参数指向同一个变量!


package Moderate;

/**
 * 
 * Write a function to swap a number in place without temporary variables.
 * 
 * 译文:
 * 
 * 写一个函数交换两个数,不能使用临时变量。
 */
public class Moderate {

	public static void swap(int a, int b) {
		// Example for a = 9, b = 4
		a = a - b; // a = 9 - 4 = 5
		b = a + b; // b = 5 + 4 = 9
		a = b - a; // a = 9 - 5

		System.out.println("a: " + a);
		System.out.println("b: " + b);
	}

	
	// 注意这种方法当a,b是同一个变量时会有问题!
	public static void swap_opt(int a, int b) {
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;

		System.out.println("a: " + a);
		System.out.println("b: " + b);
	}

	public static void main(String[] args) {
		int a = 1672;
		int b = 9332;

		System.out.println("a: " + a);
		System.out.println("b: " + b);

		swap(a, b);
		swap_opt(a, b);
	}
}


相关文章推荐

Moderate 找最小排序区间 @CareerCup

例子:数组 1, 2, 4, 7, 10, 11, 7, 12, 6, 7, 16, 18, 19  只要对下标3到9之间的元素排序,就能使整个数组有序 思路是: // Left: 1, 2, 4...

不用中间变量实现交换swap的问题

我们在实现交换的时候一般都是用一个中间变量来暂存: void swap(int& a, int& b) { int temp = a; //exchange a = b; b = temp;...

不用临时的变量 交换两个数的两种方法

就地交换两个数是比较经典而且基础的算法之一。 我们要交换两个数字,通常的做法就创建一个中间变量,然后进行循环赋值,比如说下面的代码: void Switch(int* p1, int* p2) {...

不用临时变量交换两个数的值

原文链接:http://www.360doc.com/content/10/1025/17/1317564_63926967.shtml
  • tianfu1
  • tianfu1
  • 2011年02月16日 18:03
  • 6213

不用临时变量也可以交换变量的值

当要交换两个数的值时,通常的做法是定义一个临时变量,然后再进行交换。那么能不能不用临时变量而交换两个数的值呢?可以的!C语言提供的异或运算就可以实现这样的操作。 异或运算符^也称XOR运算符,它的规则...

【转】不用临时变量也可以交换变量的值

当要交换两个数的值时,通常的做法是定义一个临时变量,然后再进行交换。那么能不能不用临时变量而交换两个数的值呢?可以的!C语言提供的异或运算就可以实现这样的操作。  异或运算符^也称XOR运算符,...
  • wag2765
  • wag2765
  • 2016年01月30日 15:54
  • 318

不用临时变量顺次交换N个变量的值

有N(N>=2)个变量,不使用临时变量,如何顺次交换它们的值?能否只用一条语句实现?如+—+—+—+—+—+ | a | b | c | d | e | +—+—+—+—+—+ | 1 | 2 ...

程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数

#include #include using namespace std; /* 问题:编写一个函数,不用临时变量,直接交换两个数。 分析:既然只提供两个数,那么只能通过这两个数的增加和减少...

不用临时变量 实现两个变量之间的数据交换

最近看到了哈佛大学公开课:计算机科学cs50_用户体验,数组与指针,Hash函数_网易公开课 里面介绍了一个不用临时变量就可以实现两个变量之间的数据交换,好奇这是什么原因,所以找到了这篇文章,纯粹当...

CareerCup 17 中等难题 Q17.4 不用比较找出两数较大值

题目: 编写一个方法,找出两个数字中最大的那一个。不得使用
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Moderate Swap不用临时变量 @CareerCup
举报原因:
原因补充:

(最多只允许输入30个字)