# Two sum less than K

<pre><code><strong>Given an array A of integers and integer K,
</strong> return the maximum S such that there exists
    i &#x3C; j with
    A[i] + A[j] = S and
    S &#x3C; K.
 If no i, j, exist satisfying this equation, return -1.

 Example 1:

 Input: A = [34,23,1,24,75,33,54,8], K = 60
 Output: 58
 Explanation:
    We can use 34 and 24 to sum 58 which is less than 60.

 Example 2:

 Input: A = [10,20,30], K = 15
 Output: -1
 Explanation:
    In this case it's not possible to get a pair sum less that 15.

 Note:
     1 &#x3C;= A.length &#x3C;= 100
     1 &#x3C;= A[i] &#x3C;= 1000
     1 &#x3C;= K &#x3C;= 2000
</code></pre>

```go
package main

import (
	"sort"
	"testing"
)

func TwoSumLessThanK(A []int, K int) int {
	sort.Slice(A, func(i, j int) bool { return A[i] < A[j] })
	i := 0
	j := len(A) - 1
	res := -1
	for i < j {
		if A[j]+A[i] > K {
			j--
		} else {
			if A[i]+A[j] > res {
				res = A[i] + A[j]
			}
			i++
		}
	}
	return res
}

func TestTwoSumLessThanK(t *testing.T) {
	var A []int
	var K, expected int
	t.Run("Case 1", func(t *testing.T) {
		A = []int{34, 23, 1, 24, 75, 33, 54, 8}
		K = 60
		expected = 58
		res := TwoSumLessThanK(A, K)
		if res != expected {
			t.Errorf("Expected %v, got %v\n", expected, res)
		}
	})
}
```
