阅读130 返回首页    go 阿里云 go 技术社区[云栖]


申诉

前些日子 ISCteam要招 intern,我帮着出了道题 被扔在选作题里面(居然还被标为英文阅读题。。。庐山瀑布汗)
面试的同志们打完了 由出题人负责打分 如果不满意可以进行申诉

不过 我倒还真没想到我的题也有考生会来申诉
前两道都是任务相关,最后一道是一个问如果交换变量 如何用时间换空间 写段代码出来

基本上来讲 对就是对 错就是错 明明没什么好说的呀。

此君申辩 略过不表 (反正被我说的服了,一点脾气也没有)

在这里小谈下时间换空间的方法 抛个转头 等着有玉来砸

时间换空间
时间资源是什么 估计大家都知道,顾名思义么。
空间资源是什么,就是我们的硬件资源,CPU 内存什么的

一般的交换方法 大家都会
设个中间变量做中继来交换
tmp = a
a = b
b = tmp

但既然是时间换空间 自然要尽量减少空间消耗 也就是 不用中间变量
这个时候 简单的办法是
两数叠加再分配
a = a+b
b = a-b
a = a-b
但许多情况是要被考虑的 比如 超过上限怎么办
此时就可以判断两数是否同号,若是不同号则用符号比较就好, 同号的话 可以用减法代替加法 来处理掉

当年还在某个群厮混的时候还看到了某一牛人的写法
好像是
a^=b^=a^=b
大概是这样的,是用异或的办法来处理

当然 在某些可以用指针的语言里就更方便了 交换个地址就成了
由于对指针已经忘光了 在这里 抄袭下别人的文章 来说明这个问题
if(a
a=(int*)(b-a); 
b=(int*)(b-(int(a)&0x0000ffff)); 
a=(int*)(b+(int(a)&0x0000ffff)); 

else 

b=(int*)(a-b); 
a=(int*)(a-(int(b)&0x0000ffff)); 
b=(int*)(a+(int(b)&0x0000ffff)); 




砖头已出 待玉登场~

最后更新:2017-04-02 00:06:41

  上一篇:go AJAX(1)
  下一篇:go 关于ASP.NET平台下的WAP开发