(arr []T)
| 14 | import "github.com/TheAlgorithms/Go/constraints" |
| 15 | |
| 16 | func Patience[T constraints.Ordered](arr []T) []T { |
| 17 | if len(arr) <= 1 { |
| 18 | return arr |
| 19 | } |
| 20 | |
| 21 | var piles [][]T |
| 22 | |
| 23 | for _, card := range arr { |
| 24 | left, right := 0, len(piles) |
| 25 | for left < right { |
| 26 | mid := left + (right-left)/2 |
| 27 | if piles[mid][len(piles[mid])-1] >= card { |
| 28 | right = mid |
| 29 | } else { |
| 30 | left = mid + 1 |
| 31 | } |
| 32 | } |
| 33 | |
| 34 | if left == len(piles) { |
| 35 | piles = append(piles, []T{card}) |
| 36 | } else { |
| 37 | piles[left] = append(piles[left], card) |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | return mergePiles(piles) |
| 42 | } |
| 43 | |
| 44 | func mergePiles[T constraints.Ordered](piles [][]T) []T { |
| 45 | var ret []T |
nothing calls this directly
no test coverage detected