《演算法很美》之競賽演算法兩周自學速成總結

2021-10-24 15:19:45 字數 2211 閱讀 4322

寫本篇部落格的原因:在兩周後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顆,...