BackmediumGreedyuncategorizedmedium

Minimum Towns for Target Trade Value Solution

Problem Statement

Given an array of integers towns representing the trade values of 27 towns, find the minimum number of towns required to achieve a total trade value of at least 947. The towns are sorted in descending order of their trade values. The function returns the minimum count of towns.

Example 1
Input
[300, 200, 100, 500, 400, 300, 200, 100, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.5, 0.4, 0.3, 0.2, 0.1]
Output
4

Explanation: Step-by-step: We start with the largest town value, 300. The prefix sum is 300. We add the next town value, 200, and the prefix sum becomes 500. We add the next town value, 100, and the prefix sum becomes 600. We need to add more towns to reach the target of 947. We add the next town value, 500, and the prefix sum becomes 1100. We add the next town value, 400, and the prefix sum becomes 1500. We add the next town value, 300, and the prefix sum becomes 1800. We add the next town value, 200, and the prefix sum becomes 2000. We have exceeded the target of 947, so we stop here. The minimum number of towns required is 4.

Example 2
Input
[947, 946, 945, 944, 943, 942, 941, 940, 939, 938, 937, 936, 935, 934, 933, 932, 931, 930, 929, 928, 927, 926, 925, 924, 923, 922, 921]
Output
1

Explanation: Step-by-step: We start with the largest town value, 947. The prefix sum is 947. We have already reached the target of 947, so we stop here. The minimum number of towns required is 1.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Minimum Towns for Target Trade Value — Problem Statement & Solution Guide

GreedyMediumMixed
TimeO(n)
|
SpaceO(1)

Problem Description

Given an array of integers towns representing the trade values of 27 towns, find the minimum number of towns required to achieve a total trade value of at least 947. The towns are sorted in descending order of their trade values. The function returns the minimum count of towns.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Minimum Towns for Target Trade Value"

medium

WHY DOES IT MATTER?

Greedy prefix-sum is essential because it transforms a potentially combinatorial selection problem into a deterministic linear scan, ensuring optimality and efficiency. It eliminates the need for backtracking or state tracking, which would otherwise inflate complexity.

OPTIMIZATION CHALLENGE

The key insight is that the sorted order guarantees that any optimal solution must include the largest elements first; thus, once the cumulative sum reaches the target, no further elements are needed. This reduces the problem to a single pass.

REAL-WORLD CONNECTION

Consider a warehouse picking system where items are sorted by value. To fulfill a minimum value order with the fewest items, the system picks the highest-value items first—exactly the same greedy strategy used here.

When implementing, remember to handle edge cases: if the target is zero, return 0; if the total sum of all towns is still below the target, return the array length or an error indicator. Also, use a simple loop to avoid unnecessary array copies.

COMPLEXITY AT A GLANCE

⏱ Time:O(n)
💾 Space:O(1)

Core Theory — Why This Approach?

The problem reduces to finding the smallest prefix of a sorted (descending) array whose sum meets or exceeds a target value. Because the array is sorted from largest to smallest, a greedy strategy—adding the largest remaining element first—guarantees the minimal number of elements needed. Any alternative that skips a larger element in favor of smaller ones would only increase the count, as the sum would grow more slowly. Naïve approaches such as enumerating all subsets or using dynamic programming would have exponential or quadratic time complexity, which is unnecessary and impractical even for the modest size of 27 towns. The optimal paradigm is a single linear scan accumulating a running total until the target is reached, yielding O(n) time and O(1) auxiliary space.

Interview Questions on This Problem

Q1How would you explain the greedy choice property in this problem to a candidate during an interview?

I would ask the candidate to justify why picking the largest remaining town first can never lead to a suboptimal solution. The answer should highlight that any solution that skips a larger town in favor of smaller ones would require at least one additional town to reach the same total, thus violating minimality. This demonstrates understanding of the greedy choice property.

Q2A fintech platform needs to allocate capital to a set of projects with descending expected returns. Which algorithmic pattern from this problem applies, and why is it relevant?

The pattern is a greedy prefix-sum selection. In capital allocation, you want the fewest projects to hit a return threshold; sorting by return and picking from the top ensures minimal count. This mirrors the problem’s solution and is relevant for quick decision-making under budget constraints.

Q3During a high-growth startup interview, a candidate proposes a recursive solution that checks all combinations of towns. What key insight can you point out to steer them toward the optimal approach?

I would point out that the array is sorted in descending order, so a simple linear scan with a running sum is sufficient. The recursive exhaustive search is unnecessary and will lead to timeouts; the greedy prefix-sum approach is both simpler and faster.

Examples

Example 1

Input

[300, 200, 100, 500, 400, 300, 200, 100, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.5, 0.4, 0.3, 0.2, 0.1]

Output

4

Explanation: Step-by-step: We start with the largest town value, 300. The prefix sum is 300. We add the next town value, 200, and the prefix sum becomes 500. We add the next town value, 100, and the prefix sum becomes 600. We need to add more towns to reach the target of 947. We add the next town value, 500, and the prefix sum becomes 1100. We add the next town value, 400, and the prefix sum becomes 1500. We add the next town value, 300, and the prefix sum becomes 1800. We add the next town value, 200, and the prefix sum becomes 2000. We have exceeded the target of 947, so we stop here. The minimum number of towns required is 4.

Example 2

Input

[947, 946, 945, 944, 943, 942, 941, 940, 939, 938, 937, 936, 935, 934, 933, 932, 931, 930, 929, 928, 927, 926, 925, 924, 923, 922, 921]

Output

1

Explanation: Step-by-step: We start with the largest town value, 947. The prefix sum is 947. We have already reached the target of 947, so we stop here. The minimum number of towns required is 1.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

Optimal Approach & Strategy

Iterate through the sorted towns, accumulating a running sum until it reaches or exceeds 947, then return the number of towns processed. This linear scan uses constant extra space.

Brute Force Approach

Enumerate all subsets of towns, compute each subset’s total trade value, and track the smallest subset size that meets or exceeds 947. This approach has exponential time complexity.

Verified Code Solutions

JavaScript Solution
Time: O(n)
function solution(nums) {
   let prefixSum = 0;
   let count = 0;
   for (let i = 0; i < nums.length; i++) {
       prefixSum += nums[i];
       count++;
       if (prefixSum >= 947) {
           return count;
       }
   }
   return count;
}

Asked in Top Tech Interviews

uncategorizedmediumgeneric

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.