题目:
给你一个下标从 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
}