func merge(left, right []int) []int {
result := make([]int,0)
leftStart, rightStart := 0, 0
leftEnd, rightEnd := len(left), len(right)
for leftStart < leftEnd && rightStart < rightEnd {
if left[leftStart] == right[rightStart] {
result = append(result, left[leftStart])
leftStart++
rightStart++
} else if left[leftStart] < right[rightStart] {
result = append(result, left[leftStart])
leftStart++
} else {
result = append(result, right[rightStart])
rightStart++
}
}
for leftStart < leftEnd {
result = append(result, left[leftStart])
leftStart++
}
for rightStart < rightEnd {
result = append(result, right[rightStart])
rightStart++
}
return result
}
func sort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
middle := len(arr)/2
leftArray := arr[:middle]
rightArray := arr[middle:]
leftArray = sort(leftArray)
rightArray = sort(rightArray)
return merge(leftArray, rightArray)
}
func thirdMax(nums []int) int {
result := sort(nums)
fmt.Println(result)
if len(result) >= 3 {
return result[len(result) - 3]
}
return result[len(result) - 1]
}