日常练习24——交换AB

  • Post author:
  • Post category:其他

1.基本变换

 函数内使用任何临时变量,交换两个数的值。

//思路:使用中间变量

public class Exchange {
    public int exchangeAB(int A,int B) {
       int tmp = 0;
        tmp = A;
        A = B;
        B = tmp;
       
    }
 }    

2.无缓存交换

牛客网:https://www.nowcoder.com/questionTerminal/845ec89145b04b2b855d020d9c3ea2ef

请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。

给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。

//思路一:通过两个计算两个数的和与差来交换a,b的位置
//(a,b)----(a+b,b)----(a+b,a-b)------(b,a-b)----(b,a)

import java.util.*;


public class Exchange {
    public int[] exchangeAB(int[] AB) {
         
        AB[0]=AB[0]+AB[1];
        AB[1]=AB[0]-2*AB[1];
        AB[0]=(AB[0]-AB[1])/2;
        AB[1]=AB[0]+AB[1];
        return AB;
         
    }

}
//思路二:使用加法会溢出,可使用异或

//异或运算,按位相同为0,不同为1
//交换律
//结合律(即(a^b)^c == a^(b^c))
//对于任何数x,都有x^x=0,x^0=x
//自反性 A XOR B XOR B = A xor  0 = A

import java.util.*;
public class Exchange {
    public int[] exchangeAB(int[] AB) {
        /*AB[0] ^= AB[1];
        AB[1] ^= AB[0];
        AB[0] ^= AB[1];
        */

        AB[0] = AB[0]^AB[1];
        AB[1] = AB[0]^AB[1];
        AB[0] = AB[0]^AB[1];
        return AB;
    }
 }    

 

 


版权声明:本文为qinghuan1998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。