生活随笔
收集整理的這篇文章主要介紹了
一些算法题,欢迎来改进
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第一題,關(guān)鍵字:字符串翻轉(zhuǎn)
Reverse the words in a given English sentence (string) in C or C++ without requiring a separate buffer to hold the reversed string (programming)
For example:
Input:? REALLY DOGSDISLIKE MONKEYS
Output: MONKEYS DISLIKEDOGS REALLY
My code is
void?reverse_string?(char?*s,?int?start,?int?end)??{?????//?be?sure?that?start?is?less?than?end?????if?(start?>=?end)?????????return;??????????char?tmp;?????while?(start?<?end)?{?????????tmp?=?*(s?+?start);?????????*(s?+?start)?=?*(s?+?end);?????????*(s?+?end)?=?tmp;?????????start++,?end--;?????}?}??void?reverse_sentence?(char?*s,?int?n)?{?????reverse_string(s,?0,?n-1);?????int?start;?????bool?in_word?=?false;?????for?(int?i=0;?i<=n;?i++)?????{?????????if?(*(s+i)?==?'?'?||?*(s+i)?==?'\0')??????????{?????????????if?(in_word)?????????????????reverse_string(s,?start,?i-1);?????????????in_word?=?false;?????????}?else?if?(!in_word)??????????{?????????????in_word?=?true;?????????????start?=?i;?????????}?????}?}??int?string_len?(const?char?*s)??{?????int?i?=?0;?????while?(*(s+i++)?!=?'\0');?????return?i-1;?}??void?test_reverse_sentence?()?{?????char?s[]?=?"REALLY?DOGSDISLIKE?MONKEYS";?????reverse_sentence?(s,?string_len(s));?????std::cout?<<?s;?}? ?第二題,關(guān)于如何洗牌的一道算法題,關(guān)鍵字:隨機(jī)數(shù)生成
Write a program to shuffle a deck of 52 cards, which is stored in an array and print the shuffle result
My Code:
void?shuffle_deck?()?{?????char?deck[52];?????//?Clear?the?array,?set?as?zero.?????memset(deck,?0,?52);?????int?loc;??????????//?Use?number?1,2,..52?represent?52?deck?cards.?????for?(int?i=1;?i<=52;?i++)??????{?????????do?{?????????????loc?=?rand()?%?52;?????????}?while?(deck[loc]?!=?0);??????????????????deck[loc]?=?i;?????}???????????????//?Print?the?shuffle?result.?????for?(int?i=0;?i<52;?i++)?{?????????printf?("%d?",?deck[i]);?????}?}? 第三題,這是微軟電話面試中的一道題,利用一個(gè)循環(huán)想將一個(gè)浮點(diǎn)數(shù)增加2^32次,下面的代碼可以實(shí)現(xiàn)嗎?
|
float?f?=?0.f;?for?(int?i=0;?i<2^32;?i++)?{?????f?+=?1;?}? |
循環(huán)變量i是有符號(hào)整型,能夠表示的范圍為-2^31 ~ 2^31-1,所以這段代碼不可能完成想要完成的任務(wù)。
第四題,這是微軟電話面試中的另外一道題,設(shè)計(jì)一個(gè)算法,對(duì)給定的任意一個(gè)字節(jié)實(shí)現(xiàn)按比特位翻轉(zhuǎn),要求算法的時(shí)間復(fù)雜度為O(1)。
實(shí)現(xiàn)字節(jié)按比特位翻轉(zhuǎn)的算法不難,難的是滿足時(shí)間復(fù)雜度為O(1)。其實(shí)思想很簡(jiǎn)單,就是用空間換時(shí)間,因?yàn)橐粋€(gè)比特位要么是0,要么是1,因此一個(gè)字節(jié)8個(gè)比特位也就256種可能性,是可枚舉的,只要建立一張包含所有可能的比特位翻轉(zhuǎn)映射表就可以了。
第五題, 這是在codility種遇到的一個(gè)問題,在一個(gè)整型數(shù)組種找平衡點(diǎn)的問題,具體需要再分析。
第六題,微軟電話面試中的另外一道題,100階樓梯,每階樓梯的高度是不同的,但是是依次遞減的,給2個(gè)相同的玻璃小球,小球從高于一定的高度摔下會(huì)被摔碎,請(qǐng)?jiān)O(shè)計(jì)一種策略,要求嘗試最少的次數(shù)就可以找到小球被摔碎的高度閥值。
這個(gè)題已有答案,待有時(shí)間時(shí)再寫分析。
?
?
?
轉(zhuǎn)載于:https://blog.51cto.com/hailinan/942682
總結(jié)
以上是生活随笔為你收集整理的一些算法题,欢迎来改进的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。