Third Maximum number - Golang using merge sort with duplicate removal
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]
    
}
Comments (0)