题目:
题解:
func find132pattern(nums []int) bool {
candidateI, candidateJ := []int{-nums[0]}, []int{-nums[0]}
for _, v := range nums[1:] {
idxI := sort.SearchInts(candidateI, 1-v)
idxJ := sort.SearchInts(candidateJ, -v)
if idxI < idxJ {
return true
}
if v < -candidateI[len(candidateI)-1] {
candidateI = append(candidateI, -v)
candidateJ = append(candidateJ, -v)
} else if v > -candidateJ[len(candidateJ)-1] {
lastI := -candidateI[len(candidateI)-1]
for len(candidateJ) > 0 && v > -candidateJ[len(candidateJ)-1] {
candidateI = candidateI[:len(candidateI)-1]
candidateJ = candidateJ[:len(candidateJ)-1]
}
candidateI = append(candidateI, -lastI)
candidateJ = append(candidateJ, -v)
}
}
return false
}