力扣:面试题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;
    }
};
相关推荐
晴天的雨.9923 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
aramae9 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路10 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
荆棘鸟智能10 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
淡海水10 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
知识分享小能手13 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868713 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
INGNIGHT14 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805414 小时前
C++常见八股
数据结构·c++·算法
qq_1998868714 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力