1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- type minHeap []int // Stores the length only
- func (h minHeap) Len() int { return len(h) }
- func (h minHeap) Less(i, j int) bool { return h[i] < h[j] }
- func (h minHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
- func (h *minHeap) Push(x interface{}) {
- *h = append(*h, x.(int))
- }
- func (h *minHeap) Pop() interface{} {
- l := len(*h)
- x := (*h)[l-1]
- *h = (*h)[0 : l-1]
- return x
- }
- var m map[int]*minHeap
- func isPossible(nums []int) bool {
- m = make(map[int]*minHeap)
- for _, num := range nums {
- last := helper(num - 1)
- l := 0
- if last.Len() != 0 {
- l = heap.Pop(last).(int)
- }
- curr := helper(num)
- heap.Push(curr, l+1)
- }
- for _, v := range m {
- h := *v
- for _, l := range h {
- if l < 3 {
- return false
- }
- }
- }
- return true
- }
- func helper(num int) *minHeap {
- if h, ok := m[num]; ok {
- return h
- } else {
- var h minHeap
- m[num] = &h
- return &h
- }
- }
|