使用二進位制解決過什麼問題嗎?
x = x ^ y // (1)
y = x ^ y // (2)
x = x ^ y // (3)
把(1)中的 x 代入 (2)中的 x,有
y = x^y = (x^y)^y = x^(y^y) = x^0 = x
x 的值成功賦給了 y。
對於(3),推導如下:
x = x^y = (x^y)^x = (x^x)^y = 0^y = y
一些演算法題中, 會有"不能超過整數範圍"的要求, 但是我們沒法預知執行環境的匯流排長度
對於有符號整數:
//最大值:
int_max = int(^uint(0) >> 1)
//最小值:
int_min = ^int_max
對於無符號整數:
//最大值:
int_max = ^uint(0)
//最小值:
int_min = 0
//核心是不停地抹去低位的1
func numberof1(n int) int
return res
}
給你一組整型資料,這些資料中,其中有乙個數隻出現了一次,其他的數都出現了兩次,讓你來找出乙個數 。原理:
func find(arr int) int
return rs
}
案例, 雙色球儲存:
一注雙色球格式:01,02,03,04,05,06|01(20個字元)
紅區共33個號碼可選, 藍區共16個號碼可選
要儲存所有的組合:
c(33,6) * c(16, 1) = 1107568 * 16 = 17721088 注
儲存共:17721088 * 20 = 300m
使用二進位制儲存:
共使用33個bit位記錄33個紅球和16個bit位記錄16個紅球, 乙個整型儲存就夠了(64位系統), 儲存可減少一半, 結合壓縮, 會更低
場景:儲存的資料可列舉
問題:容易套用平鋪直敘的思維方式去推導電腦程式演進
遞迴的三大要素:
例:斐波那契數:1、1、2、3、5、8、13…, 求第n項的值
//明確你這個函式想要幹什麼: f(n) 的功能是求第 n 項的值
func fibonacci(n int) int
//尋找遞迴結束條件
func fibonacci(n int) int
}//找出函式的等價關係式(遞推公式)
//根據數列規則, 乙個項的值是前兩項之和
首先建立兩個指標p1和p2,讓它們同時 指向這個鍊錶的頭節點。然後開始乙個大迴圈,在迴圈體中,讓指標p1 每次向後移動1個節點,讓指標p2每次向後移動2個節點,然後比較兩個 指標指向的節點是否相同。如果相同,則可以判斷出煉表有環,如果不同,則繼續下一次迴圈
追及問題:
在乙個環形跑道上,兩個運動員從同一地點起跑,乙個運動員速度快, 另乙個運動員速度慢。當兩人跑了一段時間後,速度快的運動員必然會 再次追上並超過速度慢的運動員,原因很簡單,因為跑道是環形的。
為什麼快的指標步長是2?因為在快的追上慢的前, 必然是相差1或2步, 如果落後1, 下次一定能追上, 如果落後2, 那麼下次一定是落後1, 再下一次就能追上
func hascycle(head *listnode) bool
}return false
}
//輸入
["a", "b", "c"]
//輸出
["a", "b"]
["b", "c"]
["a", "c"]
例如求5中選3的組合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
for
result = addto(result, indexs)
break
} }//本次迴圈沒有找到 1 0 ,說明已經取到了最後一種情況
if !find
}
聊聊那些年的騷操作!!!
適逢過年,技術文章也沒多少人願意耐著性子看,那就聊聊我那些年的騷操作。給大家講講故事的同時,如果能給列位有所啟發,那這篇文章也算是沒有白費我的腦汁子。今天要講的是有關那些年我賺錢的一些騷操作,當然都是一些小錢,但是操作性是可以借鑑或複製的。故事得從我上大學時候開始,敘事不分時間先後。不知道各位中有沒...
linux的那些騷技能
awk awk 是處理文字檔案的乙個應用程式,幾乎所有 linux 系統都自帶這個程式。它依次處理檔案的每一行,並讀取裡面的每乙個字段。對於日誌 csv 那樣的每行格式相同的文字檔案,awk可能是最方便的工具。基本用法 awk 動作 檔名 demo awk demo.txt print 列印,0 當...
string的騷操作
炒雞簡單的題目,大牛們都不看在眼裡的,怪我哦!輸入一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可能有些整數以 0 開頭,這些頭部的 0 應該被忽略掉,除非這個整數就是由若干個 0 組成的,這時這個整數就是0 你的任務是 對這些分割得到的整數,依從小到大的...