当前位置:首页 > 力扣 > 力扣面试题 16.01 :用异或操作玩转两数交换

力扣面试题 16.01 :用异或操作玩转两数交换

2周前 (05-18)


力扣面试题 16.01 :用异或操作玩转两数交换 力扣 面试题 异或 算法 第1张给定一个长度为 2 的整数数组 numbers,要求在不使用额外内存空间(即不使用临时变量)的情况下,交换数组中的两个元素并返回。题目考验对位运算的理解与应用,需通过巧妙的异或操作实现两数值的高效交换,而非依赖传统中间变量方法。



思路与过程

通过三次异或(XOR)操作完成两数交换,核心逻辑是基于异或运算的以下特性:

1.自反性‌:a ^ a = 0

2‌.恒等性‌:a ^ 0 = a

3.交换律与结合律‌:a ^ b = b ^ a(a ^ b) ^ c = a ^ (b ^ c)

具体步骤如下:

1.第一步‌:将 numbers[0] 赋值为 numbers[0] ^ numbers[1],此时 numbers[0] 存储了两数的“叠加”信息。

2.第二步‌:将 numbers[1] 赋值为当前 numbers[0](即叠加后的值)与原始 numbers[1] 异或,此时 numbers[1] 还原为原始 numbers[0] 的值。

3.第三步‌:将 numbers[0] 再次与当前 numbers[1](即原始 numbers[0])异或,此时 numbers[0] 还原为原始 numbers[1] 的值。

整个过程未使用临时变量,仅通过三次异或操作完成交换,时间复杂度 O(1),空间复杂度 O(1)。


代码:

class Solution {  
public:  
    vector<int> swapNumbers(vector<int>& numbers) {  
        // 三步异或交换法  
        numbers[0] = numbers[0] ^ numbers[1];  // 将两个数的异或结果暂存到 numbers[0]  
        numbers[1] = numbers[0] ^ numbers[1];  // 用叠加结果异或 numbers[1],得到原始 numbers[0] 并赋给 numbers[1]  
        numbers[0] = numbers[0] ^ numbers[1];  // 用叠加结果异或新的 numbers[1],得到原始 numbers[1] 并赋给 numbers[0]  
        return numbers;  
    }  
};



原创内容 转载请注明出处

分享给朋友:

相关文章

70.爬楼梯|三步破解动态规划核心奥秘

70.爬楼梯|三步破解动态规划核心奥秘

题意新解:站在楼梯底仰望n级台阶,每步可选1或2阶,最终的路径组合犹如斐波那契数列般展开。比如到达第3阶的路径可由第1阶跨两步,或第2阶跨一步构成,这种递推规律揭示了两两相邻状态间的紧密关联。思路解析...

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

题目重解给定一个字符串,将字符按照出现频率降序排列。例如输入"tree",可能返回"eetr"或"eert"。题目要求我们不考虑字母顺序,只...

力扣第92题:三步定位 精准反转链表指定区间

力扣第92题:三步定位 精准反转链表指定区间

题目解读给定一个单链表和两个整数left与right,要求将链表中从第left个节点到第right个节点的部分进行反转,而保持其他部分不变。例如,对于链表1→2→3→4→5,left=2,right=...

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

力扣第71题:用栈轻松解决Unix路径简化问题

力扣第71题:用栈轻松解决Unix路径简化问题

题目解读:在Unix风格的文件系统中,我们经常需要处理各种复杂的路径表示。给定一个绝对路径字符串,我们需要将其转换为最简化的规范路径。规范路径要求:路径始终以斜杠'/'开头;两个目录名...

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

题目解读给定一个不含重复元素的整数数组,我们需要构建一棵最大二叉树。构建规则是:数组中的最大值作为根节点,其左侧子数组构建左子树,右侧子数组构建右子树,然后递归地应用这个规则。这种构建方式体现了分治思...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。