【经典算法问题 二】交换两个变量值,不使用第三个变量

简介: 【经典算法问题 二】交换两个变量值,不使用第三个变量

昨天面试的时候问到了这个,回答了异或的方式,后来自己又想了一下,总结这么几种

/**
 * 
 */
package test;
import java.util.Stack;
/**
 * <p>
 * Title:NoNeedThreeChange
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月25日 上午9:08:13
 */
public class NoNeedThreeChange {
  public static void changewithoperate(int a, int b) {     //利用加减运算符
    a = a - b;
    b = a + b;
    a = b - a;
    System.out.println("a =" + a);
    System.out.println("b =" + b);
  }
  public static void changewithoperateY(int a, int b) {    //利用异或的原理
    a = a ^ b;
    b = a ^ b; // 一个数和自己的异或为0,任何一个数和0异或是它本身
    a = a ^ b;
    System.out.println("a =" + a);
    System.out.println("b =" + b);
  }
  public static void changewithStack(int a, int b) {    //利用栈的后进先出原理
    Stack<Integer> s= new Stack<Integer>();
    s.push(a);
    s.push(b);
    System.out.println("a =" + s.pop());
    System.out.println("b =" + s.pop());
  }
  public static void main(String[] args) {
    int a = 10;
    int b = 20;
    changewithoperate(a, b);
    System.out.println("==================================");
    changewithoperateY(a, b);
    System.out.println("==================================");
    changewithStack(a,b);
  }
}

输出结果

a =20
b =10
==================================
a =20
b =10
==================================
a =20
b =10


相关文章
|
15天前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
17 0
|
6月前
|
算法
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
|
2月前
|
搜索推荐 算法
在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?
【2月更文挑战第8天】【2月更文挑战第21篇】在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?
|
2月前
|
算法 测试技术 C++
【动态规划】【C++算法】801. 使序列递增的最小交换次数
【动态规划】【C++算法】801. 使序列递增的最小交换次数
|
4月前
|
算法
【算法】排序——选择排序和交换排序(快速排序)
上篇文章讲述了插入排序及插入排序的优化希尔排序,今天我们继续给大家带来排序中的选择排序和交换排序,选择排序包括直接选择排序、 其中还包括堆排序,因为之前讲过堆排序,这篇文章就不多讲解,点击直达堆排序。交换排序包括冒泡排序、快速排序。让我们开始今天的选择排序之旅吧!!!
|
4月前
|
算法 测试技术 C#
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
|
5月前
|
算法
代码随想录算法训练营第四天 | LeetCode 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
代码随想录算法训练营第四天 | LeetCode 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
141 0
|
5月前
|
存储 算法
代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交 ,142.环形链表II
代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交 ,142.环形链表II
|
7月前
|
算法 搜索推荐
【数据结构与算法篇】手撕八大排序算法之交换排序
【数据结构与算法篇】手撕八大排序算法之交换排序
32 0
|
8月前
|
算法
代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 (面试题) 02.07. 链表相交 142.环形链表II
代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 (面试题) 02.07. 链表相交 142.环形链表II