不使用第三个变量实现元素之间的交换

来源:互联网 发布:韩路淘宝店叫什么 编辑:程序博客网 时间:2024/05/31 13:16

解决这类的问题的关键的在于:运算可逆,逻辑可逆

只要有+就可以用-返回去

有*就可以用/返回去

用^可以用^返回去

还有一个巧妙的方法将三步操作合为一步

我这里用java写,用c的自己加*

第一种

void change(int a,int b){

a=a*b;

b=a/b;

a=a/b;

}

该方法中我们用乘法新产生一个值,用除法将值还原回去

缺点:用乘法使元素变大,类型内存溢出


第二种

void change(int a,int b){

a=a+b;

b=a-b;

a=a-b;

}

该方法中我们用加法新产生一个值,用减法将值还原回去

缺点:降低了乘法内存溢出的可能,但是还会有内存溢出的可能


第三种

void change(int a,int b){

a=a^b;

b=a^b;

a=a^b;

}

使用逻辑上的异或操作,很好的避免了内存问题。


下面两种方法中,为了不使用第三方变量,我们将三步操作合为一步

于是就不需要第三方变量了

第四种

void change(int a,int b){

a=a+b-(b=a);

}

第五种

void change(int a,int b){

a=b+0*(b=a);

}


我见到还有使用堆栈的,只为实现交换元素用堆栈是不是有点杀鸡用牛刀的感觉

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩喜欢咬指甲怎么办 宝宝喜欢咬指甲怎么办 婴儿含奶睡觉怎么办 宝宝2岁还吃母乳怎么办 宝宝总抠屁眼怎么办 一年级的孩子厌学怎么办 孩子就是不说话怎么办 感觉自己反应慢怎么办 小学生数学基础不好怎么办 数学考差了怎么办 孩子考试成绩差该怎么办 大学高数听不懂怎么办 遇上自私的父母怎么办 小孩一年级数学不好怎么办 数学考试考不好怎么办 孩子奥数学不好怎么办 孩子下笔太重怎么办 小孩子写字太重怎么办 经常对小孩发火怎么办 对小孩发火后悔怎么办 小孩子不喜欢学数学怎么办? 孩子心里素质差怎么办 三年级语文太差怎么办 宝宝一年级很笨怎么办 一年级孩子太笨怎么办 孩子学习脑子笨怎么办 四年级孩子数学差怎么办 中考考不好了怎么办 初中没学高中怎么办 数学基础差该怎么办 三年级数学成绩差怎么办 夫妻差6岁怎么办 初一数学很差劲怎么办 三年级孩子成绩差怎么办 初中数学成绩不好怎么办 大人不会算数学怎么办 小学初数学不好怎么办 初中生数学计算能力差怎么办 初中生数学计算差怎么办 初一数学没救了怎么办 五年级英语不好怎么办