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

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

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

示例 1:

输入:nums = [3,7,8,1,1,5], space = 2
输出:1
解释:如果我们输入 nums[3] ,我们可以摧毁位于 1,3,5,7,9,... 这些位置的目标。
这种情况下, 我们总共可以摧毁 5 个目标(除了 nums[2])。
没有办法摧毁多于 5 个目标,所以我们返回 nums[3] 。

示例 2:

输入:nums = [1,3,5,2,4,6], space = 2
输出:1
解释:输入 nums[0] 或者 nums[3] 都会摧毁 3 个目标。
没有办法摧毁多于 3 个目标。
由于 nums[0] 是最小的可以摧毁 3 个目标的整数,所以我们返回 1 。

示例 3:

输入:nums = [6,2,5], space = 100
输出:2
解释:无论我们输入哪个数字,都只能摧毁 1 个目标。输入的最小整数是 nums[1] 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109
  • 1 <= space <= 109

解题思路

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

可见,对于输入的 nums[i] 而言,若存在
nums[j]=nums[i]+c∗space ,(1)

那么 nums[j] 也能被摧毁。

根据上式易得:
nums[j] % space = (nums[i]+c∗space) % space
参考余数的分配率:(a+b)%p=(a%p+b%p)%p
最后得
nums[j] % space=nums[i] % space ,(2)

其中 % 表示求余操作(MOD)。换句话说,nums[i] 和 nums[j] 所对应目标能被同时摧毁的充要条件为 nums[i] 和 nums[j] 对于 space 同余。

基于式(2),我们可以计算出 nums 中的每一个元素对于 space 的余数,并以哈希表统计对应余数的数目。 哈希表中的最大统计值即为我们能摧毁的最多数目,找到最大统计值所对应的最小 nums[i]即为答案。

code:

class Solution:def destroyTargets(self, nums: List[int], space: int) -> int:mp = Counter()      # space<=1e9,用哈希表可压缩空间for num in nums:mp[num % space] += 1ans = float('inf')mx = max(mp.values())for num in nums:if mp[num % space] == mx and num < ans:ans = numreturn ans

2453. 摧毁一系列目标相关推荐

  1. LeetCode 6226. 摧毁一系列目标

    6226. 摧毁一系列目标 [哈希+同余] class Solution {public int destroyTargets(int[] nums, int space) {Map<Integ ...

  2. 365天挑战LeetCode1000题——Day 129 第90场双周赛

    2451. 差值数组不同的字符串 代码实现 class Solution {public:string oddString(vector<string>& words) {vect ...

  3. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  4. 【目标检测】Fast RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51036677 Girshick, Ross. "Fast r-cnn.&q ...

  5. 【目标检测】RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 Girshick, Ross, et al. "Rich f ...

  6. cmake的使用-目标类型详解

    Target Types 本章概括 CMake支持的类型有很多种,可以是可执行文件或者库文件,也可以在不构建的情况下作为其它实体的引用. 使用这种引用作用:可以在不将对象构建成自己的二进制文件的情况下 ...

  7. 目标检测系列(四)——Fast R-CNN译文

    文章目录 摘要 1. 引言 1.1 R-CNN和SPPnet 1.2 本文贡献点 2. Fast R-CNN的框架和训练过程 2.1 RoI pooling层 2.2 从预训练网络初始化 2.3 针对 ...

  8. 如何制定有价值的目标

    写于2017年07月09日23:29 现在修改发布到公众号声明原创 公司会制定一系列目标,个人也可以制定一些目标,有利于自我学习成长.那么看我这篇文章可以告诉你如何制定有价值的目标.会制定有价值的目标 ...

  9. 【目标检测】Fast RCNN算法详解(转)

    Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE International Conference on Computer ...

最新文章

  1. JAVA设计模式之命令模式
  2. [Ruby编程语言].弗拉纳根_松本行弘读书笔记
  3. 爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍
  4. Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
  5. 基于ZXing的二维码,你可以这样改造它
  6. Wdcp在安装memcached出现错误的解决办法
  7. SaaS全球普及面临三大门槛
  8. Android接入百度自动更新SDK
  9. CSS中class优先级问题
  10. mysql重建索引_mysql创建、删除、重建、删除索引的操作命令的一些总结
  11. 从源码深入理解Spring IoC 注解
  12. The Wave kernel Signature: A Quantum Mechanical Approach to shape Analysis
  13. freeswitch cdr mysql_freeswitch支持g729编码
  14. 手撕Boost!Boost公式推导及实验验证
  15. 基于sass的前端样式管理方案
  16. 树莓派4b主板特点_树莓派4B的入手操作
  17. 最新获得淘宝app商品详情原数据 的API
  18. 4.0 RTL8723DU驱动(wifi+蓝牙)
  19. 运维初学者必备之SRS音视频服务器搭建
  20. 五、jQuery 对表单、表格的操作(走过路过瞅瞅吧)

热门文章

  1. 给你的代码加点规范|ESLint
  2. google map 加点
  3. 7-8 循环日程安排问题
  4. 北京十大律师事务所权威排名
  5. Android 魔塔小游戏--界面设计以及方向键设计(一)
  6. PageHelper与MyBatisPlus IPage分页插件的使用区别
  7. 远程租用的服务器被拒绝,租用服务器远程不上怎么处理?
  8. 浅谈客户感知管理价值的量化
  9. 你不得不知道的 IP 包详解(傻瓜式讲解)
  10. 大学网络管理课程复习总结