Algorithm
func findLongestChain(pairs [][]int) int {
sort.Slice(pairs, func(i, j int) bool {
if pairs[i][0] < pairs[j][0] {
return true
} else if pairs[i][0] == pairs[j][0] {
return pairs[i][1] >= pairs[j][1]
} else {
return false
}
})
length := len(pairs)
dp := make([]int, length)
dp[0] = 1
result := 1
for i := 1; i < length; i++ {
count := 1
for j := i - 1; j >= 0; j-- {
if pairs[i][0] > pairs[j][1] {
count = dp[j] + 1
break
}
}
dp[i] = count
if count > result {
result = count
}
}
return result
}
Review
NA
TIP
這周工作過程需要在本地環(huán)境運(yùn)行不同go版本進(jìn)行編譯問題定位低剔,所以了解了下如何安裝不同go版本官方的 Go 多版本管理:使用和原理:
$ go get golang.org/dl/go<version> // 其中 <version> 替換為你希望安裝的 Go 版本
$ go<version> download // 和上面一樣琢锋,<version> 是具體的版本
Share
這周了解了下無鎖并發(fā)編程的底層原理:
- 一般我們使用的mutex屬于加鎖并發(fā)編程,是高級(jí)語言標(biāo)準(zhǔn)庫調(diào)用操作系統(tǒng)鎖機(jī)制(關(guān)中斷玷氏、自旋鎖滨嘱、信號(hào)量)來實(shí)現(xiàn)互斥鎖(mutex)的底層原理是什么楚昭? 操作系統(tǒng)具體是怎么實(shí)現(xiàn)的如庭??剑令,加鎖操作性能比較差糊啡。
- 如果想要獲得更好的并發(fā)性能,可以嘗試通過并發(fā)原理 — CPU原子性指令(一)操作進(jìn)行無鎖并發(fā)編程吁津。底層原理就是通過總線加鎖棚蓄、緩存行加鎖、原子性指令等方式實(shí)現(xiàn)碍脏。