欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【面试题 16.01】交换数字 (异或)

程序员文章站 2022-03-02 13:26:30
题目题目链接编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。示例:输入: numbers = [1,2]输出: [2,1]提示:numbers.length == 2解题思路 1创建数组开辟了一点点点的内存难道不可以忽略不计吗代码class Solution { public int[] swapNumbers(int[] numbers) { return new int[]{numbers[1],numbers[0]};...

题目

题目链接
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:

输入: numbers = [1,2]
输出: [2,1]

提示:

numbers.length == 2

解题思路 1

创建数组开辟了一点点点的内存难道不可以忽略不计吗

【面试题 16.01】交换数字 (异或)

代码

class Solution {
    public int[] swapNumbers(int[] numbers) {
        return new int[]{numbers[1],numbers[0]};
    }
}

解题思路 2

利用异或操作

  • a ^ b ^ b = a
  • a ^ b ^ a = b
  • a ^ a = 0
  • 0 ^ a = a
  • 异或满足交换律 结合律
    【面试题 16.01】交换数字 (异或)

代码

class Solution {
    public int[] swapNumbers(int[] numbers) {
        numbers[0] = numbers[0] ^ numbers[1];
        numbers[1] ^= numbers[0];
        numbers[0] ^= numbers[1];
        return numbers;
    }
}

本文地址:https://blog.csdn.net/qq_35416214/article/details/107285193