首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不占用任何额外空间的情况下交换两个数的值

    题目 假如有x、y两个数,如何在不占用任何额外空间的情况下交换两个数的值?...思路 平时我们在交换两个数的值时,往往会用一个中间数temp来实现效果,现在需要不占用任何额外空间,自然就不能使用这种寻常的方法了;这里可以有两种方法来实现。...方法一 1 2 3 4 5 int x = 5; int y = 10; x = x + y; y = x - y; x = x - y; 先将两个数之和附给x,接着x-y自然就是原本x的值,这时候赋值给...此时x依然是两个数之和,再进行x-y自然就是原本x的值。 这种方法比较直观,也好理解,但是可能存在溢出的情况。...任何数与0异或结果还是其自身 异或运算满足交换律和结合律 于是将x^y的结果赋予x,接着再将x与y异或,此时y的值就是x^y^y = x^(y^y) = x,也就是说y拿到了x原本的值。

    50720

    JS数组&两值交换不使用第三变量

    本文链接:https://ligang.blog.csdn.net/article/details/42048671 数组对象的作用是:使用单独的变量名来存储一系列的值!...1. shift:删除原数组第一项,并返回删除元素的值,如果数组为空则返回undefined 2. unshift:将参数添加到原数组开头,并返回数组的长度,注:其兼容性较差 3. pop:删除原数组最后一项...,并返回删除元素的值;如果数组为空则返回undefined 4. push:将参数添加到原数组末尾,并返回数组的长度 5. arrayObject.concat(arrayX,arrayX,.........不使用第三变量交换值: 方法一: var a=2,b=3; a=[b, b=a][0]; //地址指向,必须为对象 方法二: var a=2,b=3; a=b-a; b=b-a; a=b+a...separator为分隔符,省略的话则用默认用逗号为分隔符 var a = [1,2,3,4,5]; var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5" 13. js

    2.1K31

    C实现不用临时变量交换两个数的值(一行代码)

    最近看到一个问题感觉很有意思: “如何在不申请临时变量的情况下交换两个数的值?”...swap(int *p, int *q) { *a = *a ^ *b; *b = *b ^ *a; *a = *a ^ *b; } 提示:异或运算符 ^ 也称 XOR 运算符,它的规则是若参加运算的两个二进位同号...; } 方法三# void swap(int *p, int *q) { *a = *a + *b - (*b = *a); } C/C++ 中 ( A = B ) 返回得到是赋值号( = )的左面的值...计算实例: a = 3; b = 4; a = 3 ^ 4 = 7; b = 4 ^ 7 = 3; a = 7 ^ 3 = 4; -> a = 4; -> b = 3; 参考文献# 不用临时变量交换两个数的值...C/C++__基础类型的(=)赋值表达式的返回值 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    21830

    JavaScript 交换值的奇思妙想

    早期之前,在 JS 中交换值,我们主要还是使用临时变量。ES6 之后,我们可以使用展开运算符号来交换变量,除了这两种方式,你还能想到哪些呢? ? 本文主要介绍 交换变量的 10 种方法,请过目 ?...,先求出两个数的和,那么第二个数要换友第一个数的的值就是总的和减去第二个,也就是代码中的 num2 = num1-num2,同理,第一个数要换成第二个数的值,就是总的和减去第一个数的值,现在第一个数已经是赋值给第二个数...我们得到两个数字的乘积并将它们存储在其中一个变量中,对应就是 num1 = num1*num2。然后,用总数除了对应的变量,得到交换后变量的值 ?。 但这个有些问题是什么呢?...就是,如果有交换值有 0 就会得到意想不到的问题 ?: swapWithMulDiv(2.34,0) // 2.34 0 // NaN NaN 我们的值没有交换,而是得到一个奇怪的NaN。...交换的值在哪里?我们只得到这个数的整数部分。这就是问题所在。异或假设输入是整数,因此执行相应的计算。

    43840

    不用临时的变量 优雅、高效的交换两个数方法

    这显然不是正确的做法。...到目前为止,我们的答题思路是没错的,就是寻找另外一种数据存储的模式,用一个变量保存两条信息的集合,我们仍然需要采用这种模式解决这个问题,但原先的简单相加的模式是不行了,于是我们想到,集合两个整型数字,是否可以从其二进制表达方面来考虑...用 1 和 0 来做简单的验证,看是否可以用异或的方式,存储信息的集合: 如果两个数是a = 1和b = 0,则: 集合 = 1 0 异或 集合 = 1 1 异或 集合 = 0 如果 a = 1 & b...= 1 集合 = 0 1 异或 集合 = 1 如果 a = 0 & b = 0 集合 = 0 0 疑惑 集合 = 0 验证结果: 可以采用信息集合的方式存储 那么我们的交换代码可以变成(C的实现):...,应该算是就地交换两个数的最佳解决方案了。

    80740

    寻找和为定值的两个数

    题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。...=sum,如果某一刻a[i]+a[j]>sum,则要想办法让sum的值减小,所以此刻i不动,j--,如果某一刻 a[i]+a[j]的值增大,所以此刻i++,j不动。...所以,数组无序的时候,时间复杂度最终为 O(n*logn+n)=O(n*logn),若原数组是有序的,则不需要事先的排序,直接O(n)搞定,且空间复杂度还是O(1),此思路是相对于上述 所有思路的一种改进...总结: 不论原序列是有序还是无序,解决这类题有以下三种办法:1、二分(若无序,先排 序后二分),时间复杂度总为O(n*logn),空间复杂度为O(1);2、扫描一遍X-S[i]  映射到一个数组或构造hash...<<endl; 44 45 return 0; 46 } 寻找和为定值的多个数: 2010年中兴面试题编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于

    1.1K70

    寻找和为定值的两个数

    作者 | 陌无崖 转载请联系授权 题目要求 输入一个整数数组和一个整数,在数组中查找一对数,满足他们的和正好是输入的那个整数,如果有多对数的和等于输入的整数,则全部输出,要求输出的结果中不应该出现重复...什么是散列 Hash一般翻译成散列,或哈希,就是把任意长度的输入(又叫做预映射)通过散列算法,变换成固定程度的输出,该输出就是散列值。...对于上题,我们按照传统的思路设计我们会遍历数num的同时,来验证sum-num是否也在该数组中,这就需要用到我们的查询操作,如果是数组的查询,每遍历一个数的时候,做最坏的打算,之多遍历n此,因此n个数的遍历就是...然后我们可以遍历我们的原始数组,进行查询比较。这里需要注意按照题目的要求已经遍历的不可以在进行遍历了,因此我们对已经遍历的需要进行标记。结合map我们可以用key所对应的value值进行判定。...完整代码 // 解法一:散列映射 func SelectNum(data []int, sum int) [][]int { // 构建一个空间为n的散列表即map,bool值用来标记是否已经被使用

    82310

    发现一个交换两个数值的好方法

    以前交换两个数值总是这样做的: temp = b b = a a = temp 这可是万年不变老方法了,可是emm多了一个变量出来总是不爽的。毕竟占了内存嘛。强迫症犯了,那该怎么办?...也就是如果对应的二进制位值相同,那么结果为0,否则为1 嗯有点感觉了,再看看这三行代码 我们知道任何数与自身异或均为0,0与任何数异或均为他自身 这里就是应用了这个原理 第一行代码 a = a^b 第二行展开来就是...^a = b(原)^a(原)^b(原)=a(原) b(原)^b(原)是0,那么二进制结果就是a(原)了嘛 同样道理,第三行展开来就变成了 a = a(原)^b(原)^a(原)=b(原) 这样就实现了两个数值的交换了...,而不用占用更多的内存空间,逼格就上来了

    38610

    JS|函数的返回值

    我们先来看一组代码 function kunkun(aru){ console.log(aru)}kunkun('打篮球') 这个看似能输出结果,实则是在逻辑上是不合理的,我们函数是做某件事或者实现某种功能...所以,接下来我会介绍一种逻辑更严谨的代码。 解决方案 return语句 有的时候,我们希望函数将返回值返回给调用者,此时通过使用return语句就可以实现。...函数的返回值格式 function 函数名(){ return 需要返回的结果;}函数名(); 函数只是实现某种功能,最终的结果需要返回给函数的调用者。是通过return来实现的。...只要函数遇到return就会把后面的结果,返回给函数的调用者。...num2){ return num1 + num2;}console.log(sum(1,2)) 结果输出为:3 由此可知,不要在函数的内部输出结果,应该return给函数的调用者。

    11.4K10

    【说站】python交换两个变量的值

    python交换两个变量的值 本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。 1、在python中独一无二,也是最简单的方法。...a,b=b,a 2、引入第三个变量,可以看作是两个装满牛奶的瓶子a和瓶子b。如果我想在这两个瓶子里换牛奶,我需要一个空瓶子temp。首先,将a瓶中的牛奶倒入空瓶子temp中。...这时,a瓶是空的,b瓶中的牛奶可以倒入a中,然后将temp中的牛奶倒入b中,从而实现交换。...不可用) 已知a, b >>> a = 2 >>> b = 5 >>> a = a^b >>> a 7 >>> b = a^b >>> b 2 >>> a = a^b >>> a 5 >>> 4、采用特殊的运算方式...a=a+b b=a-b a=a-b 以上就是python交换两个变量值的方法,一般来说python自带的方法是快速而简单的,对于其他的交换方法,大家可以在实例中进行体会。

    73120
    领券