Back to all solutions

#2453 - Destroy Sequential Targets

Problem Description

You are given a 0-indexed array nums consisting of positive integers, representing targets on a number line. You are also given an integer space.

You have a machine which can destroy targets. Seeding the machine with some nums[i] allows it to destroy all targets with values that can be represented as nums[i] + c * space, where c is any non-negative integer. You want to destroy the maximum number of targets in nums.

Return the minimum value of nums[i] you can seed the machine with to destroy the maximum number of targets.

Solution

/**
 * @param {number[]} nums
 * @param {number} space
 * @return {number}
 */
var destroyTargets = function(nums, space) {
  const map = new Map();
  let maxCount = 0;

  for (const num of nums) {
    const remainder = num % space;
    map.set(remainder, (map.get(remainder) || 0) + 1);
    maxCount = Math.max(maxCount, map.get(remainder));
  }

  let result = Infinity;
  for (const num of nums) {
    if (map.get(num % space) === maxCount) {
      result = Math.min(result, num);
    }
  }

  return result;
};