|  | @@ -1,3 +1,50 @@
 | 
	
		
			
				|  |  | +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
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 |