基本信息
文件名称:力扣面试题16.01「交换数字」新手教程.docx
文件大小:14.02 KB
总页数:3 页
更新时间:2025-05-31
总字数:约小于1千字
文档摘要

力扣面试题16.01「交换数字」新手教程

题目深度解析

题目要求不使用临时变量交换两个整数的值。

关键点:

1.限制条件?:不能使用临时变量

2.输入输出?:输入是包含两个数字的vector,输出是交换后的vector

3.算法要求?:需要原地修改数组

生活场景类比

假设你有两杯饮料:

杯子A:可乐

杯子B:雪碧

传统方法需要第三个杯子来交换,而题目要求你只能用这两个杯子完成交换

解题步骤详解

1.异或运算特性?:

a^a=0

a^0=a

2.三步交换法?:

第一步:numbers[0]=a^b

第二步:numbers[1]=(a^b)^b=a

第三步:numbers[0]=(a^b)^a=b

注意事项

1.可读性?:虽然高效但不如临时变量直观

2.适用范围?:仅适用于整数交换

完整注释代码

classSolution{

public:

vectorintswapNumbers(vectorintnumbers){

//第一步:numbers[0]存储a和b的异或结果

numbers[0]=numbers[0]^numbers[1];

//第二步:numbers[1]现在等于原始numbers[0]

numbers[1]=numbers[0]^numbers[1];

//第三步:numbers[0]现在等于原始numbers[1]

numbers[0]=numbers[0]^numbers[1];

returnnumbers;

}

};

算法分析

时间复杂度?:O(1)只有三次位运算

空间复杂度?:O(1)没有使用额外空间

优势?:

1.不需要临时变量

2.避免可能的溢出问题

局限性?:

1.可读性较差

2.不适用于所有数据类型

位运算的应用,是面试中考察位运算理解的典型题目。理解这个交换原理有助于深入理解计算机底层运算机制。