力扣:面试题16.01.交换数字

题目及测试样例:

题目链接:面试题 16.01. 交换数字 - 力扣(LeetCode)https://leetcode.cn/problems/swap-numbers-lcci/description/

★划重点:

如果不设置临时变量,可以采用异或运算的性质:两个数a和b:a^a=0,0^a=a来计算本题

思路:将需要交换的两个值a与b先做好原始数据的标记①与②【不需要写进代码里面,但是自己得心里得清楚,否则会绕进死胡同里面导致算错】,之后进行一系列异或运算,每一步计算都将式子化简为包含①和②的表达式,再进行约分,就可以实现交换a与b了

提交代码:

cpp 复制代码
class Solution {
public:
    vector<int> swapNumbers(vector<int>& a) {
        //如果不设置临时变量,可以采用异或运算的性质:两个数a和b:a^a=0,0^a=a来计算本题
        //【a[0]值为①】
        //【a[1]值为②】//当且仅当a[0]=a[1]时①=②,本题就是要交换①和②的值:将【a[0]值为②】,【a[1]值为①】
        a[0]=a[0]^a[1];//此时的a[0]值为③,这个③和上面的①含义不同
        a[1]=a[1]^a[0];//将式子拆成最初的①和②来计算:【a[1]=a[1]^a[0]=a[1]^a[0]^a[1]=0^a[0]=a[0]   此时的【a[1]=a[0],这个地方的a[0]说的是①,将①的值赋值给a[1];】
        a[0]=a[0]^a[1];//将式子拆成最初的①和②来计算:【a[0]=a[0]^a[1]=a[0]^a[1]^a[0]=0^a[1]=a[1]   此时的【a[0]=a[1],这个地方的a[1]说的是②,将②的值赋值给a[0];  】
        return a;
    }
};
相关推荐
W230357657311 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.11 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
minji...12 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
语戚13 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_1113 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
bIo7lyA8v14 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo14 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_2869451914 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd