• LeetCode 面试题 16.01. 交换数字


    一、题目

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

    示例:

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

    提示:

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

      点击此处跳转题目

    二、C# 题解

      恰逢前两天看到过位运算的方法,这里刚好用上了哈哈。使用异或操作可以交换两个 int 型变量的值而无需临时变量,异或满足交换律与结合律,具体运算如下:

    1 ⊕ 1 = 0 1 ⊕ 0 = 1 0 ⊕ 1 = 1 0 ⊕ 0 = 0 11=010=101=100=0 11=010=101=100=0

      可以发现,两个相同的数异或结果均为 0:
    1 ⊕ 1 = 0 0 ⊕ 0 = 0 11=000=0 11=000=0

      1/0和0异或结果均不变:
    1 ⊕ 0 = 1 0 ⊕ 0 = 0 10=100=0 10=100=0

      因此,对于整数 a 进行异或运算,有如下性质:
    a ⊕ a = 0 a ⊕ 0 = a aa=0a0=a aa=0a0=a

      给定两个整数 a 和 b,进行如下操作:

    a ′ = a ⊕ b b ′ = a ′ ⊕ b = a ⊕ b ⊕ b = a ⊕ 0 = a a ′ ′ = a ′ ⊕ b ′ = a ′ ⊕ a = a ⊕ b ⊕ a = a ⊕ a ⊕ b = 0 ⊕ b = b a=abb=ab=abb=a0=aa=ab=aa=aba=aab=0b=b a=abb=ab=abb=a0=aa′′=ab=aa=aba=aab=0b=b

      因此,给出代码如下(很整齐的代码hh):

    public class Solution {
        public int[] SwapNumbers(int[] numbers) {
            numbers[0] = numbers[0] ^ numbers[1];
            numbers[1] = numbers[0] ^ numbers[1];
            numbers[0] = numbers[0] ^ numbers[1];
            return numbers;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 时间:112 ms,击败 100.00% 使用 C# 的用户
    • 内存:40.30 MB,击败 100.00% 使用 C# 的用户

      当然,实际使用时不建议这样写,因为可读性太差。这里只是为了做题~

  • 相关阅读:
    NLP(六十九)智能文档问答助手升级
    lvs+keepalived: 高可用集群
    (vue)树文件夹点击,最后一层标记
    微服务系列之分布式日志 ELK
    Unity按钮无反应
    springboot整合websocket开箱即用
    1.3.20 交换机端口安全
    基于eNSP的校园网设计的仿真模拟
    SpringCloud LoadBalancer 新一代负载均衡器
    Collection接口常用方法总结。
  • 原文地址:https://blog.csdn.net/zheliku/article/details/134001390