申訴
前些日子 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));
}
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