Finding the Minimum Sum of a K-Avoiding Array

Problem Overview

This article explores an algorithm to find the minimum possible sum of a k-avoiding array with n elements.

Problem Statement

Given two integers n and k, a k-avoiding array is defined as an array of distinct positive integers where no pair of different elements sums to k.

Return the minimum possible sum of such an array with exactly n elements.

Examples

Example 1:

Input: n = 5, k = 4
Output: 18
Explanation: A valid k-avoiding array is [1,2,4,5,6] with sum 18.
No k-avoiding array with smaller sum exists.

Example 2:

Input: n = 2, k = 6
Output: 3
Explanation: Array [1,2] is valid with sum 3.
No k-avoiding array with smaller sum exists.

Constraints:

1 <= n, k <= 50

Solution Approach

The key insight is: if we include a number t in our array, we cannot include k-t. To minimize the sum, we should always prefer the smaller number in each forbidden pair (t, k-t).

Following a greedy strategy, we first include the smaller numbers starting from 1: 1, 2, 3, ... up to k/2. These numbers are safe because their complementary values k-1, k-2, ... are not included in the array.

This leads to two distinct cases:

Case 1: n ≤ k/2
We can construct the array using the first n positive integers: [1, 2, ..., n]. The sum is simply the arithmetic series sum.

Case 2: n > k/2
We first include all numbers from 1 to k/2. We still need (n - k/2) more elements. Since any number t ≥ k has k-t ≤ 0 (not a positive integer), we can safely add numbers starting from k: k, k+1, k+2, ... until we reach n elements total.

Our final array consists of two arithmetic sequences: [1, 2, ..., k/2] and [k, k+1, ..., k+n-k/2-1].

Code Implementation

class Solution {
    /**
     * Strategy: Prefer smaller values from forbidden pairs (t, k-t).
     * When numbers from 1 to k/2 are insufficient, extend with k, k+1, k+2...
     * All values >= k are safe since k - t becomes non-positive.
     */
    public int minimumSum(int n, int k) {
        if (n <= k / 2) {
            return (1 + n) * n / 2;
        }
        
        int smallCount = k / 2;
        int largeCount = n - smallCount;
        int sumSmall = (1 + smallCount) * smallCount / 2;
        int lastLarge = k + largeCount - 1;
        int sumLarge = (k + lastLarge) * largeCount / 2;
        
        return sumSmall + sumLarge;
    }
}

Complexity Analysis

Time Complexity: O(1) - constant time operations
Space Complexity: O(1) - no additional space used

Summary

The solution leverages a greedy approach by preferentially selecting smaller values from each forbidden pair. The mathematical insight that numbers greater than or equal to k cannot form pairs summing to k allows us to safely extend the array when needed. The final answer is computed using arithmetic series formulas.

Tags: LeetCode greedy array arithmetic-sequence algorithm

Posted on Thu, 03 Sep 2026 16:44:02 +0000 by maxmo