2453. 摧毁一系列目标

46 阅读1分钟

题目:
给你一个下标从 0 开始的数组 nums ,它包含若干正整数,表示数轴上你需要摧毁的目标所在的位置。同时给你一个整数 space 。

你有一台机器可以摧毁目标。给机器 输入 nums[i] ,这台机器会摧毁所有位置在 nums[i] + c * space 的目标,其中 c 是任意非负整数。你想摧毁 nums 中 尽可能多 的目标。

请你返回在摧毁数目最多的前提下,nums[i] 的 最小值 。

算法: 方法一:取模
又是利用取模,c * sapce是一个提示。
利用取模,将多个数字归到同一个集合中。

func destroyTargets(nums []int, space int) int {
    // space是一个模,
    maxCnt, low := 0, math.MaxInt64
    m := make(map[int][]int)
    sort.Ints(nums)
    for i := range nums {
        m[nums[i] % space] = append(m[nums[i] % space], nums[i])
    }
    for _, list := range m {
        if len(list) > maxCnt {
            maxCnt = len(list)
            low = list[0]
        } else if len(list) == maxCnt && list[0] < low{
            low = list[0]
        }
    }
    return low
}