LeetCode 算法:交换数字

110 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 29 天,点击查看活动详情

交换数字

原题地址

编写一个函数,不用临时变量,直接交换 numbers = [a, b]ab 的值。

示例1:

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

示例2:

输入: numbers = [0,2147483647]
输出: [2147483647, 0]

提示:

  • numbers.length == 2
  • -2147483647 <= numbers[i] <= 2147483647

思路分析

方法一

使用 ES6 的语法可以很快速的将数组中的两个元素进行交换位置,具体使用方法为 [a, b] = [b, a]

方法二

  1. 使用两个数字之间的加减法可以得到想要的结果;
  2. a = b - a b = b - aa = b + a

方法三

  1. 使用异或运算符来解决;
  2. a ^ b ^ b = aa ^ b ^ a = b,因此可以 a = a ^ bb = a ^ ba = a ^ b

方法四

  1. 使用数组的性质,将 numbers[0] 构造成一个二维数组,然后分别取值即可交换;
  2. 也可使用数组的 reverse 方法直接将数组翻转。

AC 代码

方法一

/**
 * @param {number[]} numbers
 * @return {number[]}
 */
var swapNumbers = function(numbers) {
    [numbers[0], numbers[1]] = [numbers[1], numbers[0]]
    return numbers
};

结果:

  • 执行结果: 通过
  • 执行用时:64 ms, 在所有 JavaScript 提交中击败了30.00%的用户
  • 内存消耗:41 MB, 在所有 JavaScript 提交中击败了34.00%的用户
  • 通过测试用例:52 / 52

方法二

/**
 * @param {number[]} numbers
 * @return {number[]}
 */
var swapNumbers = function(numbers) {
    numbers[0] = numbers[0] - numbers[1]
    numbers[1] += numbers[0]
    numbers[0] = numbers[1] - numbers[0]
    return numbers
};

结果:

  • 执行结果: 通过
  • 执行用时:64 ms, 在所有 JavaScript 提交中击败了30.00%的用户
  • 内存消耗:40.8 MB, 在所有 JavaScript 提交中击败了66.00%的用户
  • 通过测试用例:52 / 52

方法三

/**
 * @param {number[]} numbers
 * @return {number[]}
 */
var swapNumbers = function(numbers) {
    numbers[0] = numbers[0] ^ numbers[1]
    numbers[1] = numbers[0] ^ numbers[1]
    numbers[0] = numbers[0] ^ numbers[1]
    return numbers
};

结果:

  • 执行结果: 通过
  • 执行用时:60 ms, 在所有 JavaScript 提交中击败了54.00%的用户
  • 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了45.33%的用户
  • 通过测试用例:52 / 52

方法四

/**
 * @param {number[]} numbers
 * @return {number[]}
 */
var swapNumbers = function(numbers) {
    numbers[0] = [numbers[0] , numbers[1]]
    numbers[1] = numbers[0][0]
    numbers[0] = numbers[0][1]
    return numbers
};

结果:

  • 执行结果: 通过
  • 执行用时:56 ms, 在所有 JavaScript 提交中击败了80.67%的用户
  • 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了40.67%的用户
  • 通过测试用例:52 / 52

END