不借助第三个变量,进行两个整数的交换
来源:互联网 发布:李嫣兔唇原因知乎 编辑:程序博客网 时间:2024/04/29 14:21
通常情况下,我们要交换两个变量的数值,类似冒泡排序,常用的方式是借助第三个变量,如下:
function bubbleSort(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp } } } return arr}
那如何不借助第三个变量 呢?请看下面代码:
function swap(a, b) { b = a + b a = b - a b = b - a return [a,b]}
上面的代码可以成功将 a, b 的值交换,不信可以试下。
那是怎么做到的呢?
左边是解法 ==> 右边是解释
- 第一种解法:
b = b - a ==> b 相当于 (b - a)a = a + b ==> 由上可得 a = a + (b - a) 也就是 a = bb = a - b ==> 由上可得 b = b - (b - a) 也就是 b = a交换成功~
注意:以上右边解释所写的 a 和 b 都是初始的 a 和 b
- 第二种解法:
与第一种解法一样,都是利用加减法。
b = a + b ==> b 相当于 (a + b)a = b - a ==> 由上可得 a = (a + b) - a 得到 a = bb = b - a ==> 由上可得 b = (a + b) - b 得到 b = a交换成功~
注意:以上右边解释所写的 a 和 b 都是初始的 a 和 b
- 第三种解法:
这种解法是使用异或解的,用到的异或的一个重要的知识点就是:
对于一个数,异或另一个数两次最终得到的还是原来的数
a = a ^ b ==> a 相当于 a ^ bb = a ^ b ==> 由上可得 b = a ^ b ^ b 得到 b = aa = a ^ b ==> 由上可得 a = a ^ a ^ b 得到 a = b交换成功~
注意:以上右边解释所写的 a 和 b 都是初始的 a 和 b
——以下内容更新于2017.8.25——
- 第四种解法:
这种解法是采用数组的一种特殊技巧。
let a = 1;let b = 2;a = [b, b = a][0]; ==> a:2,b:1;
- 第五种解法:
这种解法是采用了 ECMAScript 2015(ES6) 的解构赋值。
let a = 1;let b = 2;[a,b] = [b,a] ==> a:2,b:1;
—–我是分隔线—–
这是我的第一篇博客,也是我用Markdown写的第一篇博客,如果有排版不好的地方请多见谅,如果内容有错请一定在评论区给我指点迷津,在下诚惶诚恐。
阅读全文
0 0
- 不借助第三个变量,进行两个整数的交换
- 不借助第三个变量交换两个整数的值
- 不借助第三个变量交换两个整数
- 不借助第三个变量交换两个整数
- 不借助第三个变量实现两个变量的交换
- 不借助第三个变量交换两个变量的值
- 不借助第三个变量实现两个数的交换
- 不使用第三个变量完成两个整数的交换
- 不使用第三个变量完成两个整数的交换
- 不引入第三个变量交换两个整数的值
- 不借助第三个变量交换两个值
- 交换两个整数类型的变量(不借助第3个变量)
- 交换两个变量的值,不借助第三个变量的四种方法(学习)
- 不借助第三个变量实现两个变量之间的值传递和交换
- 不借助第三个变量实现两个变量之间的值传递和交换
- 不借助第三个变量来交换两个变量的值
- JAVA不借助第三个变量实现两个变量交换的思考
- 不借助第三个变量实现两个变量交换的思考
- poj 2533 最长上升子序列 多种姿势
- AMD发布专用挖矿驱动
- java源码阅读之LinkedBlockingQueue
- JAVA学习笔记_request请求转发_response重定向
- shell备份上传脚本
- 不借助第三个变量,进行两个整数的交换
- HDU-1754-I Hate It
- hdu-6140Hybrid Crystals
- 3-10提供web服务
- 2017年8月15日提高组T1 字符串
- Java版表达式计算器
- Codeforces Round #386 (Div. 2) B. Decoding
- 2-html-协议相关
- Typical Policy Representation in Policy Search Methods