力扣:面试题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;
    }
};
相关推荐
Yuk丶2 分钟前
厌倦了假AI对话?本地 LLM 语音对话 + 口型同步系统 2.0(已开源!)
c++·人工智能·语言模型·开源·ue4·语音识别·游戏开发
2501_9318037511 分钟前
线性筛(欧拉筛):从原理到应用
算法
kyle~11 分钟前
ROS2---零拷贝
linux·c++·机器人·ros2
Ricky_Theseus14 分钟前
栈 & 队列 应用场景
数据结构·c++
ysu_031415 分钟前
leetcode数据结构与算法5~7:链表双指针与二级指针
数据结构·学习·算法·leetcode·链表
薇茗15 分钟前
【C++】类与对象 核心篇
开发语言·c++
ouliten17 分钟前
C++笔记:偏现代C++日志系统
c++·笔记
猪脚饭还是好吃的17 分钟前
【分享】C4droid 安卓C++编译器 手机编程超便捷
android·c++·智能手机
草莓熊Lotso17 分钟前
【Linux网络】深入理解传输层 UDP 协议:从底层原理到实战应用
linux·运维·服务器·c语言·网络·c++·udp
小江的记录本17 分钟前
【Spring全家桶】Spring Cloud 2023.0.x:配置中心:Nacos Config、Apollo(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·python·spring·spring cloud·面试