《演算法很美》筆記整理 Chpter 1

2021-09-12 02:49:02 字數 1235 閱讀 1069

位運算:

​ 使用符號「>>>」進行右移操作的時候是用0來填充高位;

(用於unsigned, 不存在符號 「<<

使用符號「>>」進行右移操作的時候是用符號位填充高位;

對於int資料型別: 1 << 35 與 1 << 3 相同, 超過32則%32;

(計算機通過模運算實現加減法的統一)

對於long資料型別: 類似, 但是超過64則%64;

「奇巧淫技」:

​ ① 判斷奇偶: x & 1 = 1 => x是奇數; x & 1 = 0 => x是偶數;

​ (根據最後一位數 0/1 就可以判斷奇偶性,其他部分可以不考慮)

​ ② 獲取二進位制第k位上為1 or 0: 先將 1 左移 n 位 到 k;

​ x & (1 << n) = 1 => 第k位上為1; x & (1 << n) = 0 => 第k位上為0;

​ (n是移動位數, 1 << n 除了該位為 1, 其餘部分為 0,起到了遮蔽作用)

​ ③ 交換兩個整數: a = a^b; b = b^a; a = a^b;

​ (注意要處理 a == b 的情況, 否則都會變成 0)

​ (注意只能是整數,不需要中間變數temp,且運算速度和運算範圍要好於以下方法)

​ a = a+b; b = a-b; a = a-b;

​ ④求絕對值: int i = a >> 31; return ( ( a^i ) - i );

​ (a >> 31 得到的就是 a 的符號位, 如果 a < 0, 那麼 i = 0xffffffff = -1;

​ 如果 a >= 0, 那麼 i = 0x00000000 = 0; )

summary: 異或, 可以理解為是不進製加法。 1^1 = 0, 0^0 = 0, 1^0 = 1。

性質: 1) 交換律: a^b = b^a

2) 結合律: abc = a(bc)

3) x^x = 0 x^0 = x(0是不影響異或的結果的)

4) abb = a^0 = a (與連續同因子做異或運算)

筆記整理1

說說對arraylist的理解 最常用的list實現類 內部是陣列實現的 允許對元素進行快速隨機訪問 缺點就是元素之間不能存在間隔 陣列大小不滿足時需要增加儲存能力,需要複製資料到新的儲存空間 當在中間增加元素時,需要批量的複製和移動,因此適合隨機查詢和遍歷,不適合插入和刪除。說說對vector的理...

出現k次與出現1次《演算法很美》

具體思路 建立乙個字元二維陣列char kradix new char len 將arr的每乙個數轉換成三進製integer.tostring arr i k 並進行翻轉 變為字串 最後整成字元陣列 同時要將最長的三進製數長度儲存if kradix i length maxlen maxlen kr...

演算法課件整理(1)

瑞士蘇黎世大學著名的計算機科學家 pascal程式語言之父 結構化程式設計首創者 1984年圖靈獎獲得者沃斯 niklaus wirth 於1976年的著名公式 algorithms data structures programs 在這個著名經典的公式中 生動地表達出了演算法和資料結構的相互作用,...