Two Sum Less Than K - An NLogN Solution

Problem is here: https://leetcode.com/problems/two-sum-less-than-k/

Given an array A of integers and integer K, return the maximum S such that there exists i < j with A[i] + A[j] = S and S < 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. 1 <= A.length <= 100
  2. 1 <= A[i] <= 1000
  3. 1 <= K <= 2000
The approach is to sort the array and implement the "two pointers" technique. Have a left and right pointer. Notice that if the sum surpasses (or equal to) K, the only option is to move right down. If it is less than K, check if it is the max thus far and move the left up. Do this until the pointers cross each other. NLogN. Code is below, cheers, ACC.


public class Solution
{
    public int TwoSumLessThanK(int[] A, int K)
    {
        Array.Sort(A);

        int left = 0;
        int right = A.Length - 1;
        int maxSum = -1;

        while (left < right)
        {
            int sum = A[left] + A[right];

            if (sum >= K)
            {
                right--;
            }
            else
            {
                maxSum = Math.Max(maxSum, sum);
                left++;
            }
        }

        return maxSum;
    }
}

Comments

Popular posts from this blog

Advent of Code - Day 6, 2024: BFS and FSM

Golang vs. C#: performance characteristics (simple case study)

Advent of Code - Day 7, 2024: Backtracking and Eval