一些神奇的小题目
潛水久了,看到很多有趣的小題目,這里做一個(gè)收集,很多都已經(jīng)是很有名了。以后有看到其他好玩的也會(huì)不斷添進(jìn)來(lái)。
1、有兩變量x、y,如何在不用臨時(shí)空間交換兩變量的值?
這題解法很多,有代表性的就是 {y = x+y; x = y-x; y = y-x; } 或者連續(xù)異或。都是以時(shí)間換空間的方案。
2、一個(gè)數(shù)組存放了2n+1個(gè)整數(shù),其中有n個(gè)數(shù)出現(xiàn)了2次,1個(gè)數(shù)出現(xiàn)了1次,找出出現(xiàn)1次的數(shù)是多少?
這是在一篇講筆/面試的博客里看到的(原文:http://www.cnblogs.com/wangbin_ben/archive/2010/11/14/1876947.html#commentform)。第一個(gè)想法自然是快排,然后線(xiàn)性?huà)呙琛2贿^(guò)這是O(nlogn),考官提示還有更快的,那明顯往線(xiàn)性考慮。不過(guò)想了很久還是想不出來(lái),最后看了下作者的街解答,是將數(shù)組里每一個(gè)元素異或,最后得到一個(gè)值就是答案。真是精妙啊!
所以以后見(jiàn)到數(shù)組,不僅要考慮其下標(biāo)性質(zhì),也要考慮其作為一個(gè)整體/每個(gè)元素進(jìn)行處理的性質(zhì),說(shuō)不定會(huì)更簡(jiǎn)單。
3、字符串反轉(zhuǎn):給定字符串“we;tonight;you;”,編碼實(shí)現(xiàn)輸出“ew;thginot;uoy;”
這題其實(shí)不難,主要是想記一下可以用棧來(lái)完成各種反轉(zhuǎn)。
4、多個(gè)棧模擬隊(duì)列問(wèn)題(均只有出/入兩種操作)
現(xiàn)在想到的是用2個(gè)棧a和b,push時(shí)候一樣push到a,pop時(shí)候先把所有元素丟到另一個(gè)棧b中,然后對(duì)b進(jìn)行pop,時(shí)間復(fù)雜度為4n。偽代碼如下:
class stackQueue?{
Stack a,b;
void?push (elemType Elem)?{
a.push(Elem);
}
elemType pop{?
if(b.isEmpty())?
while !(a.isEmpty()) b.push(a.pop);
return(b.pop);
}}
轉(zhuǎn)載于:https://www.cnblogs.com/Jesse-Luo/archive/2010/11/14/1877038.html
總結(jié)
- 上一篇: 7 月 5 日解锁更多细节,尼古拉斯・凯
- 下一篇: 腾达 W311R 无线路由器自动获取上网