寫本篇部落格的原因:在兩周後2020.10.24需要參加程式設計競賽,每天自學總結,藉此培養並加強自己的演算法思維,加油!另外,感謝b站講授《演算法很美》和《資料結構不難》的那個藍橋教育的up主。
10.10
1.判斷奇偶數。x&1,為1,則x為奇數,為0,則x為偶數。
2.獲取二進位制位是1還是0。比如求乙個數的二進位制表示的第五位數字,把這個數右移4位得到的結果和1做與運算,為1則為1,為0則為0。
3.在不引進第三個變數的前提下,交換兩個數的值。
4.計算乙個數的二進位制的一的個數。乙個很好的思想就是減1和原來的數與運算,然後一直重複下去直到出現0000全是0的時候,看做了多少次,那就有幾個1。
5.一條語句判斷乙個整數是不是2的整數次方。
if((
(n-1)
&n)==0)
6.將整數的奇偶位互換。將原數和010101。。。與運算,保留偶數字,得到a,原數和101010。。。與運算,保留奇數字,得到b,a左移一位得到的數和b右移一位得到的數異或就可以了。用1做與運算是保留數的。
7.整數二進位制是取模,但是小數是乘2,0.625×2,1.25,小數點前為1,那就是0.1,砍掉1,就是0.25,×2,0.5,不足1,補0得到0.10,0.5乘2得1,即為0.101。
8.陣列中只有乙個數出現1次,其餘所有的數出現k次,找出出現1次的那個數。解題思路是k個k進製的數不進製加法等於0,轉換進製用jdk的interger.tostring(十進位制數,進製),所有數的k進製的最後一位的和對k的取餘得到出現一次的那個數的最後一位,所有數的k進製的倒數第二位的和對k的取餘得到出現一次的那個數的倒數第二位,以此類推。
1.遞迴:找重複的步驟,分離出共性,找變化並把變化的量作為變數,找邊界出口,不然會一直遞迴下去,函式一直等待下乙個函式,出現棧溢位的問題。一般是變數加小規模。可以用切蛋糕思維來找出來規律。
2.斐波那契數列:分解為多個小規模。找遞推公式。
static int fib(int n)
3.最大公約數。
static int gcc(int m,int n)
4.插入排序。
static void insertsort(int arr[
],int k)
arr[index+1]
=x;}
5.漢諾塔問題
static void paihannuotower(int n,string from,string to,string help)
paihannuotower(n-1,from,help,to)
;//先把n-1個盤子挪到輔助空間上去
system.out.println(
"move"+n+"from"+from+"to"+to)
;//n可以順利到達target
paihannuotower(n-1,help,to,from)
;//讓n-1從輔助空間回到源空間上去
}
6.二分查詢遞迴
7.希爾排序
8.2的冪表
9.排序演算法效能
因為在leedcode整理了競賽面試演算法精簡200題,故這篇部落格有時間再更。
演算法很美之位運算
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 描述乙個整型陣列裡除了兩個數字 互不相同 之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 輸入第一行 陣列的長度n 1只出現了1次的那兩個數,小的在前大的在後,空格隔...
演算法很美之字串
描述 fjxmlhx每天都在被沼躍魚刷屏,因此他急切的找到了你希望你寫乙個程式遮蔽所有句子中的沼躍魚 marshtomp 不區分大小寫 為了使句子不缺少成分,統一換成 fjxmlhx 輸入輸入包括多行。每行是乙個字串,長度不超過200。一行的末尾與下一行的開頭沒有關係。輸出輸出包含多行,為輸入按照描...
演算法很美之數學問題
描述 今天我們要認識一對新朋友,alice與bob。alice與bob總是在進行各種各樣的比試,今天他們在玩乙個取石子的遊戲。在這個遊戲中,alice和bob放置了n堆不同的石子,編號1 n,第i堆中有a i 個石子。每一次行動,alice和bob可以選擇從一堆石子中取出任意數量的石子。至少取1顆,...