,引用必須註明出處!
在基本的工作內容開發中,演算法不會顯得那麼重要,而在百萬級別的時候,差距非常大,今天帶大家研究下常見的字串反轉演算法。
public class stringreverse
return new string(s);
} public static string reverse2(string s)
return new string(str);
} public static string reverse3(string s)
public static string reverse4(string s)
public static string reverse5(string s)
public static string reverse6(string s)
public static string reverse7(string s)
public static void main(string args)
system.out.println("reverse1:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse2:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse3:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse4:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse5:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse6:" + (system.currenttimemillis() - curtime));
curtime = system.currenttimemillis();
for (int i = 0; i < length; i++)
system.out.println("reverse7:" + (system.currenttimemillis() - curtime));
}}
其他有趣的演算法:
如賽馬問題,25匹馬,5個賽道,如何在不用工具的情況下,找到最快的5匹。問題可以簡化為3匹馬,3個賽道。
分a b c三組馬,各賽一場,結果如下:
a1 a2 a3
b1 b2 b3
c1 c2 c3
3場第1名賽一場,得出第1名
如果是a1,則a2跟b1和c1比1場,其他同理,找出第2名
如果是b1,則a2跟b2和c1比1場,其他同理,找出第3名
比賽結束,共需要6場
同理可算出,25匹馬需要10場。
如運煤問題,3000噸煤,用載重1000噸的火車,從原點運往終點,路程1000公里,每公里消耗1噸煤,到終點時煤剩幾何?
粗略一算,第一種方案:
第一輪,
第1次,先拉1000噸到a,卸下500噸,返回,行程250公里
第2次,再拉1000噸到a,卸下500噸,返回,行程250公里,同理第三次
第3次後,a地剩下1500噸煤,行程250公里
第二輪繼續第4次,同上,到b地行程187.5公里,每次卸下375噸貨物
兩輪後,行程437.5公里,剩下貨物750噸
第三輪一次性運到,共剩餘312.5噸
分析:由於第三輪每次只運750噸,運量未滿,導致最終運送較少。
粗略一算,第二種方案:
第1次,先拉1000噸到a,
卸下500噸
,行程250公里
,返回
第2次,再拉1000噸到a,加上250噸滿載,剩下250噸;走250公里到b,卸下250噸,總行程250公里,返回
第3次,再拉1000噸到a,加上250噸滿載;再走250公里到b,加上前兩次剩下的共500噸,滿載1000噸繼續
直行到終點,共剩餘
500噸
分析:似乎比較完美,每次都是滿載。
粗略一算,第三種方案:
變下思路,將此題變成n千噸煤,可以走多少公里,即消耗多少
那麼1000噸走1000公里,2000噸運兩次,向前3次向後2次,向前只能多走1/3公里,即1000*(1+1/3)公里,
同理可得3000噸走
1000*(1+1/3+1/5)公里,n千噸可走1000*(1+1/3+1/5+……+1/(2n-1))公里
那麼3000公里剩餘多少呢?前兩句已經講了3000噸可走的公里,每公里1噸,多出多少公里即多出多少噸
即1000*(1+1/3+1/5)-1000=1600/3噸,即533.33噸。功夫不負有心人,這就是最終答案!
字串反轉 演算法
xiangqi 寫道 字串比如 ad2 lsdkf,lksdjf.sdkfj 倒序排列 sdkfj lksdjf.lsdkf,ad2 每個單詞是空格分開,標點符號當作字母,不能用string的自帶的一些方法,比如indexof,trim,split等方法。大概的偽碼,字串大的話可以用 stringb...
Java技巧 字串反轉
第一種實現 string str chentao system.out.print 逆轉後的字串是 for int i str.length 1 i 0 i system.out.print 第一種實現輸出結果是 逆轉後的字串是 oatnehc 第二種實現 借助了stringbuffer類的reve...
java實現字串反轉
問題 給乙個字串,比如 i love china 把字元反轉後變成 china love i 思路 先把字串從第乙個字元與最後乙個字元對換,第二個字元和倒數第二個字元對換,這樣,我們就把每乙個單詞位置互換了。但是我們要求單詞裡面字元的順序是不能變的,所以,我們要把每乙個單詞裡面的字元從頭到尾對換一下...