首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏海天一树

    小朋友学经典算法(13):交换

    在学C语言的时候,学过交换:《小朋友学C语言(25):交换》 https://www.jianshu.com/p/64bc70f0abfe 在学C++的时候,也学了交换:《小朋友学C++(14 ):交换》 https://www.jianshu.com/p/9a071870e0a0 这里咱们要考虑的是,个数相等的交换情况。 ********** 2 1 4 3 **********交换相同的值********** 5 5 6 6 0 0 0 0 9 9 结果显示,前组数值不同的个数,能交换成功。 后五组相同的值,交换成功的有3组。不成功的有组,并且值都变成了0。 这是什么原因呢? 观察最后三对的,都是数组里的同一元素交换。 可见自己写的个函数,一定存在bug。 仔细观察,发现a3 = 5, b3 = 5,这是个不同的变量(在内存里的地址不同),而myswap2(d[0], d[0]),这是对同一个地址里的交换

    56110发布于 2018-10-08
  • 来自专栏海天一树

    小朋友学C语言(25):交换

    如果是-0的话,因为0无所谓正负,-0就是0,这会导致计算机里面有种方式表示0。这是不允许的。那么这个数到底表示多少呢? 事实上,这个数很特殊。 接下来因为减掉之后,变小了,又变回正常的正数了。 从这里可以看出,int类型的取值范围为[-2147483648, 2147483647], 即[-2^31, 2^31-1] (五)结论 (1)使用(三)中的方法交换后,如果很大的话 ,中间a = (2)如果很大的话,比如a = 2147483647; b = 1;a = a + b的期望结果是214748364,但是因为这个数不在int的取值范围内,所以得到了一个负数。 所以,建议不要使用(三)中的方法来交换个数。

    1K60发布于 2018-04-17
  • 来自专栏海天一树

    小朋友学C++(14):交换

    之前学C语言的时候,咱们直接在main函数中使用“异或”位运算符,很容易实现了交换。 本节课将在此基础上,把交换个数的算法,封装到swap函数中。 这样不管是哪个地方想要交换个数,调用swap函数就可以了。 在swap内,m = a = 1, n = b = 2,交换后m = 2, n = 1。但是,m和n的值并不会传回给a和b,导致a和b的值没有被对换。 解决方案,使用上节课讲过的引用。 address of n: 0x7fffd009de9c Before Swap: m = 1 n = 2 After Swap: m = 2 n = 1 a = 2 b = 1 分析: 使用引用后,达到了交换 交换m和n的值,就是交换a和b的值。

    86070发布于 2018-04-17
  • 来自专栏同步文章1234

    【C交换】实现ab交换居然有三种方法?

    如果不引入第三个变量,你还有几种方法交换ab个数? int a=10; int b=20; 怎么交换a,b?

    73210编辑于 2023-01-16
  • 来自专栏C语言及其他语言

    C 关于使用异或运算交换的值

    异或运算可以达到交换的目的,代码如下: ? 但不推荐使用这种方式,附上常用的临时变量方法对比说明。 临时变量方法: ? 对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及次内存写入操作;但是对于异或运算操作,每次都需要读取个数据到寄存器中,再进行运算操作,之后把结果写回到变量中 如果使用C语言实现上述种方法,并用gcc编译器编译,可以使用命令 gcc -S swap.c 查看相应的汇编代码,临时变量法代码行数更少,另外使用 gcc 编译器时,用异或运算交换数组会出错,参见链接 在不引入临时变量的基础上,交换的值还可以使用三次加减法,代码如下: ? 这种方式同样需要三次内存写入操作,同时代码可读性也较差。 最后附上张三种方法编译后对应汇编代码对比图(平台:Ubuntu14.04,gcc 4.8.4),图中 swap1.c 文件对应临时变量法,swap2.c 文件对应加减方法,swap3.c 文件对应异或方法

    1.2K40发布于 2019-11-22
  • 来自专栏FEWY

    JavaScript初级玩法(4)—交换的多种方法

    https://blog.csdn.net/FE_dev/article/details/71419588 说明 这里说的几种交换的方法,并不仅仅适用于JavaScript中,在其他语言中同样是适用的 ,交换,便达到了我们的目的,而a=[b,b=a][0];只是他的一种简写罢了。 总结 方法2 (求和交换),方法3 (按位异或),这个方法比较局限,只能换数字,如果变量不是数字,就不能用了。 总结一下上面所有方法的思路,交换,不是凭空就能换的,终究还是要依靠一下别的,只是不用把这个数表现出来,不用再声明一个变量而已。 交换,如果大家还有什么有意思的方法,欢迎在评论区,分享出来。

    66060发布于 2019-05-27
  • 来自专栏全栈程序员必看

    之和,之积

    已知个1~30之间的数字,甲知道之和,乙知道之积。 甲问乙:”你知道是哪个数吗?”乙说:”不知道”; 乙问甲:”你知道是哪个数吗?” 甲说:”也不知道”; 于是,乙说:”那我知道了”; 随后甲也说:”那我也知道了”; 这个数是什么? 答案: 答案1:为x=1,y=6;甲知道和A=x+y=7,乙知道积B=x*y=6 答案2:为x=1,y=8;甲知道和A=x+y=9,乙知道积B=x*y=8 解: 设这个数为x,y 甲知道之和 A=x+y; 乙知道之积 B=x*y; 该题分种情况 : 允许重复, 有(1 <= x <= y <= 30); 不允许重复,有(1 <= x < y <= 2)由题设条件:甲不知道答案 <=> A=x+y 解不唯一 => A >= 5; 分种情况: A=5,A=6时x,y有双解 A>=7 时x,y有三重及三重以上解 假设

    63530编辑于 2022-08-31
  • 来自专栏赵俊的Java专栏

    交换个数

    用临时变量交换2个 示例代码: int a = 20; int b = 15; System.out.println("a="+a+",b="+b); //交换前2个的值 int temp = a; a = b; b = temp; System.out.println("a="+a+",b="+b); //交换后2个的值 这种方式也是我们经常用到的,比较容易理解的一种方法。 不用临时变量交换2个 方式一 示例代码: int a = 20; int b = 15; System.out.println("a="+a+",b="+b); //交换前2个的值 a = 方式二 示例代码: int a = 20; int b = 15; System.out.println("a="+a+",b="+b); //交换前2个的值 a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a="+a+",b="+b); //交换后2个的值 本方法使用了位运算的相关知识。

    1.1K30发布于 2018-06-04
  • 来自专栏开源部署

    Oracle相邻表记录交换(单双交换

    看到了一个这样的提问:一个表中有id和name个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双交换)。 -- 查询数据 select * from diosos; 实现相邻表记录交换(单双交换),原理就是根据对id取余判断奇偶和相邻id加减做连接关联,更新行记录的name。 -- 更新,交换,不成对不交换 update diosos d1 set d1.name = ( select d2.name from diosos d2 where (mod

    37710编辑于 2022-08-18
  • 来自专栏bigsai

    LeetCode 01之和&02相加

    LeetCode01之和 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 个 整数,并返回他们的数组下标。 本题主要有暴力和哈希种方法: 法一:暴力法 把所有配对的问题全部遍历出来,知道找到满足题意得结果为止,时间复杂度O(n2) ? 因为如果从的特性来看: 是一对形式出现的 一对有前后位置之分,在遍历到前的时候不一定会找到后面的元素,但是遍历到后面的元素前面一定被我们存储了。 ? } else { map.put(nums[i], i); } } return a; } LeetCode02之加 题目描述: 给出个 非空 的链表用来表示个非负的整数。

    56920发布于 2020-08-10
  • 来自专栏Jasper小笔记

    之和

    01 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。 但是,数组中同一个元素不能使用遍。 7, 11, 15], target = 9 输出:[0, 1] 因为 nums[0] + nums[1] = 2 + 7 = 9 02 暴力枚举 这里想必大家很快就能得到思路也就是双指针遍历所有相加判断是否与目标值相等 return new int[]{i, j}; } } } return new int[0]; } 03 Hash表 但实际上按照上面我们去到数组当中找个数相加为目标值的方式也就是在确定

    45330发布于 2021-01-18
  • 来自专栏赵俊的Java专栏

    之和

    题意 给一个整数数组,找到个数使得他们的和等于一个给定的 target。 你需要实现的函数 twoSum 需要返回这个数的下标, 并且第一个下标小于第二个下标。 思路 可以用一个 Map 集合,遍历数组,先记录下当前与目标的差值与角标,然后寻找与这个差值相同的,找到后,将这个数的角标加 1 后返回即可。 numbers[i], i); } int[] nums = {}; return nums; } } 原题地址 LintCode:之和

    78030发布于 2018-06-04
  • 来自专栏kyle的专栏

    之和

    题目 难度级别:简单 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。 但是,数组中同一个元素不能使用遍。

    41700发布于 2020-11-29
  • 来自专栏python3

    交换个变量

    问:有变量 a 和 b,将 a 和 b 的值调换 # 解法1:使用其他变量 c c = a a = b b = c # 解法2:不使用其他变量 a = a + b b = a - b a = a - b # 解法3:拆包(python特有的方法) a, b = (b, a) a, b = b, a  # =右边实质是元组

    1.2K40发布于 2020-01-17
  • 来自专栏前端小码农

    相加

    相加 题目描述 给出个 非空 的链表用来表示个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0 开头。 示意图 对相加的可视化:342 + 465 = 807,每个结点都包含一个数字,并且数字按位逆序存储。 就像在纸上计算个数字一样,首先从最低有效位也就是 链表 l1 和 l2 的头部开始相加。 由于每位数字都应当处于 0~9 的范围内,所以在计算个数字的和时可能会出现”溢出“。 进位 carry 必定是0或1,这是因为个数字相加(考虑到进位)可能出现的最大和为 9 + 9 + 1 = 19。

    1.5K20发布于 2020-07-22
  • 来自专栏c++与qt学习

    相加

    给你个 非空 的链表,表示个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这个数都不会以 0 开头。 示例1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 先将l1和l2头节点的值加起来赋值给新链表的头节点 遍历个链表,只要有一个链表还没有遍历到末尾,就继续遍历 2.每次遍历生成一个当前节点cur的下一个节点,其值为链表对应节点的和再加上当前节点cur =NULL,那么p1=l1->next,否则就说明l1位少,需要补上0 //p1=l1->next是对l1链表的每个节点进行遍历,获得当前节点上的数字 p1 = p1->next ! output(head->next); cout << head->val ; } 加法模板 <公式> 当前位 = (A 的当前位 + B 的当前位 + 进位carry) % 10 注意,AB都加完后

    1.2K10编辑于 2022-05-05
  • 来自专栏面试经验贴

    之和

    一 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。 2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 2 思路1---暴力解法 我们需要在一个数组nums中寻找个数 ,然后呢这个个数之和需要等于目标的值。 ok,我的外层循环从第一个开始遍历,内层循环从第二个遍历,如果这个数和等于目标值,我就返回下标,问题来了,我要返回下标,所以需要先暂存起来才方便,而且返回的类型也需要确定。 至此,咱们想想如何解决三之和的问题呢? 5 结尾 希望读者和咱一起一步一个脚印去把基础知识打牢固。

    54320发布于 2020-06-05
  • 来自专栏D·技术专栏

    相加

    题目 给出个 非空 的链表用来表示个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0 开头。

    1.3K40发布于 2020-04-01
  • 来自专栏计算机视觉理论及其实现

    之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。

    30840编辑于 2023-11-03
  • 来自专栏青益云记

    「  之和  」

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。

    28210编辑于 2023-01-03
领券