public class bitwise
/** 正數的左移會到0,負數的左移只能讓1越來越多。這是因為左移對應數的減小,負數會越減越小,不可能等於0
*/public static int bitmove0(int n)
n=n>>1;
}return count;}/*
* 為了克服這個問題,我們可以讓標誌1右移,效果是一樣的,而且適用於負數。但是會執行32次,int的位數是32
*/public static int bitmove1(int n)
flag=flag<<1;
}return count;}/*
*這種演算法比較難想,原數減一,會使得從右往左第乙個為1的數為0,1後面的數為1,這樣一次與運算就可以將最小的1變為0,且1後面的數也都為0,迴圈到原數變為0為止。
*例如1100-1=1011,1100&1011=1000,1000-1=0111,1000&0111=0,統計與運算的詞數就可以。
*/public static int bitmove2(int n)
return count;}}
/** 移位運算與乘除法是等價的,但是,我們推薦能使用移位運算的時候就使用移位運算,移位運算比算術運算要更快。
* 乙個數-1後與原來的數做與運算,結果為0,這個數隻含有1個1,且是2的冪次方。
* 邏輯運算有很多的好的規律,牢記這些規律,靈活運用。
*/
每天乙個演算法之指數運算
package ff 最爛的方法是乙個for迴圈解決,每次都乘以底數。這種誰都能想出來的方法可以忽略。public class power 這個是比較好的方法。使用到了分治遞迴,考慮到偶數和奇數的情況。指數是偶數時是半 半,奇數時是半 半 底數。時間複雜度lgn public static int ...
每天乙個演算法題 開篇
今天,作為乙個重要時間節點,要開始新的人生了。雖然明天正好趕上婦女節什麼的,但是跟這個沒什麼關係。對於職業規劃依然不是很明朗。有乙個被斃掉的面試至今刻骨銘心,但是也算是乙個重要的提醒,就是想要讓人看得起,首先得有能力,要不斷地學習和儲備。要不斷努力,才不會在機會來臨時白白錯過。部落格新加了乙個分類 ...
每天乙個演算法 全排列演算法
全排列演算法 給出乙個有n個元素的集合,求出這個集合所有可能的排列。一 遞迴的方法 void permutation char arr,int k int m cout 二 stl實現 有時候遞迴的效率使得我們不得不考慮除此之外的其他實現,很多把遞迴演算法轉換到非遞迴形式的演算法是比較難的,這個時候...