请教:不使用第三个变量交换两个数组的值

Kandada1985 2009-01-18 06:06:43
好像见过这么一道面试题,现在忘记咋做了,希望各位大侠帮忙?
我现在想问的是有2个情况:
1)如果两个数组的大小一样怎么交换?
2)如果两个数组的大小不一样呢?
...全文
198 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
idealguy 2009-01-19
  • 打赏
  • 举报
回复
例如: A=5, B=7
A = A + B //A=5+7=12
B = A - B //B=12-7=5, A=12
A = A - B //A=12-5=7, B=5, 完成交换
问题:如果A,B为Byte, A+b>255 时发生溢出

结论:
如果a,b为浮点(一般不溢出), 使用上述方法
如果a,b为整形,则采用:
A = A xor B // A=5 xor 7=2
B = A xor B // B=2 xor 7=5
A = A xor B // A=2 xor 5=7
yhec 2009-01-19
  • 打赏
  • 举报
回复
A = A + B
B = A - B
A = A - B
没有看明白
能否理解为

A = A + B
B = (A+B) - B
A = (A+B) - B
--------------------------
这种方法看起来符合,实际用了累加器做了中间交换单元,
shyli 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 litaoye 的回复:]
不一样大的数组怎么交换?

不知道lz的意思是不是交换两个指针的值?
[/Quote]
嗯,不懂楼主的意思。
idealguy 2009-01-19
  • 打赏
  • 举报
回复
但如果有溢出debug就会退出了
AlwaysSLH 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 idealguy 的回复:]
A=A+B, 溢出了咋办?
[/Quote]

溢出不是问题
引用arong1234的一句:溢出等问题不会导致算法错误,因为正运算溢出,逆运算又会溢出回来

找个例子算算就明白了
绿色夹克衫 2009-01-19
  • 打赏
  • 举报
回复
不一样大的数组怎么交换?

不知道lz的意思是不是交换两个指针的值?
idealguy 2009-01-19
  • 打赏
  • 举报
回复
A=A+B, 溢出了咋办?
AlwaysSLH 2009-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sincor 的回复:]
A = A + B
B = A - B
A = A - B
没有看明白
能否理解为

A= A + B
B =(A+B)- B
A =(A+B)- B

红色的代表同一单元

[/Quote]

可以
sincor 2009-01-18
  • 打赏
  • 举报
回复
A = A + B
B = A - B
A = A - B
没有看明白
能否理解为

A = A + B
B = (A+B) - B
A = (A+B) - B

红色的代表同一单元
AlwaysSLH 2009-01-18
  • 打赏
  • 举报
回复
不使用额外变量交换两个数的值:

1,A = A + B
B = A - B
A = A - B

2,A ^= B
B ^= A
A ^= B

数组的交换就是数的交换的重复吧

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧