package com.example.demo.algorithm;
/** * @description :
* 如何不用額外變數交換兩個數
* *普通公式:
* 異或運算:相同為0,不同為1
* 同或運算:相同為1,不同為0
* 超級公式:
* 異或運算 = 無進製相加
* * 異或運算的性質:
* 1)、0^n=n n^n=0
* 2)、異或運算滿**換律和結合律
* * @author : darren
* @date : 2021 年 02 月 07 日 20:06:18
* @since : 1.0
*/public class j008_swapvariable
/*** 兩個變數交換不申請額外遍歷
* 注意:
* 變數1和變數2必須不相等或者值相等記憶體位址不能相等,否則兩個相同的變數異或會變成0
** @param arrays
* @param var1 變數1
* @param var2 變數2
*/public static void swap(int arrays, int var1, int var2)
//var1 = 3 var2=4
//第一行執行 var1 = 3^4 var2=4
arrays[var1] = arrays[var1] ^ arrays[var2];
//第二行執行 var1 = 3^4 var2=4^3^4=3
arrays[var2] = arrays[var1] ^ arrays[var2];
//第三行執行 var1 = 4 var2=3
arrays[var1] = arrays[var1] ^ arrays[var2];
}}
不用額外變數交換兩個整數的值
題目 如何不用任何額外變數交換兩個整數的值 基本思路 如果給定整數a和b使用如下三行 即可交換a和b的值 a a b b a b a a b 如何理解這三行 的具體功能呢?首先要理解關於異或運算的特點 假設a異或b的結果為c,c就是a整數字資訊和b整數字資訊的所有不同的資訊。比如 a 4 100,b...
不用額外變數交換兩個整數的值
不用額外變數交換兩個整數的值 不用額外變數交換兩個整數的值。輸入描述 輸入一行,包含兩個整數n和m 1 09 n m 1 09 10 9 leq n,m leq 10 9 109 n,m 109 輸出描述 輸出交換後的n和m的值。示例1輸入2 3輸出3 2備註 時間複雜度o 1 o 1 o 1 額外...
如何不用第三個變數實現兩個數的交換
一般我們在寫程式時如果遇到兩個數需要交換時寫作如下 1 intx,y 23 inttemp 45 temp x x y y temp 而如果不允許有第三個變數出現即不允許有temp出現時應該如何做呢?可以寫作如下 1 intx,y 23 x x y 45 y x y 67 x x y 上述一般可以滿...