1655. Distribute Repeating Integers

1655. Distribute Repeating Integers #

Problem #

You are given an array of n integers, nums, where there are at most 50 unique values in the array. You are also given an array of m customer order quantities, quantity, where quantity[i] is the amount of integers the ith customer ordered. Determine if it is possible to distribute nums such that:

  • The ith customer gets exactly quantity[i] integers,
  • The integers the ith customer gets are all equal, and
  • Every customer is satisfied.

Return true if it is possible to distribute nums according to the above conditions.

Example 1:

Input: nums = [1,2,3,4], quantity = [2]
Output: false
Explanation: The 0th customer cannot be given two different integers.

Example 2:

Input: nums = [1,2,3,3], quantity = [2]
Output: true
Explanation: The 0th customer is given [3,3]. The integers [1,2] are not used.

Example 3:

Input: nums = [1,1,2,2], quantity = [2,2]
Output: true
Explanation: The 0th customer is given [1,1], and the 1st customer is given [2,2].

Example 4:

Input: nums = [1,1,2,3], quantity = [2,2]
Output: false
Explanation: Although the 0th customer could be given [1,1], the 1st customer cannot be satisfied.

Example 5:

Input: nums = [1,1,1,1,1], quantity = [2,3]
Output: true
Explanation: The 0th customer is given [1,1], and the 1st customer is given [1,1,1].

Constraints:

  • n == nums.length
  • 1 <= n <= 105
  • 1 <= nums[i] <= 1000
  • m == quantity.length
  • 1 <= m <= 10
  • 1 <= quantity[i] <= 105
  • There are at most 50 unique values in nums.

Problem Summary #

Given an integer array nums of length n, where there are at most 50 distinct values. You also have m customer orders quantity, where the integer quantity[i] is the number of items ordered by the ith customer. Determine whether it is possible to distribute the integers in nums to these customers while satisfying:

  • The ith customer gets exactly quantity[i] integers.
  • The integers received by the ith customer are all the same.
  • Every customer satisfies the above two requirements.

If you can distribute the integers in nums to satisfy the above requirements, return true; otherwise, return false.

Solution Ideas #

  • Given an array nums and an order array quantity, satisfy the customers’ needs according to the orders. If they can be satisfied, output true; otherwise, output false.
  • Use DFS with memoization for brute-force search. The code implementation is not difficult. (I don’t know why this problem is Hard.)

Code #

package leetcode

func canDistribute(nums []int, quantity []int) bool {
	freq := make(map[int]int)
	for _, n := range nums {
		freq[n]++
	}
	return dfs(freq, quantity)
}

func dfs(freq map[int]int, quantity []int) bool {
	if len(quantity) == 0 {
		return true
	}
	visited := make(map[int]bool)
	for i := range freq {
		if visited[freq[i]] {
			continue
		}
		visited[freq[i]] = true
		if freq[i] >= quantity[0] {
			freq[i] -= quantity[0]
			if dfs(freq, quantity[1:]) {
				return true
			}
			freq[i] += quantity[0]
		}
	}
	return false
}

Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文