文章目录

  • 1. 题目
  • 2. 解题

1. 题目

元素的 频数 是该元素在一个数组中出现的次数。

给你一个整数数组 nums 和一个整数 k 。
在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1

执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数

示例 1:
输入:nums = [1,2,4], k = 5
输出:3
解释:对第一个元素执行 3 次递增操作,对第二个元素执 2 次递增操作,
此时 nums = [4,4,4] 。
4 是数组中最高频元素,频数是 3 。示例 2:
输入:nums = [1,4,8,13], k = 5
输出:2
解释:存在多种最优解决方案:
- 对第一个元素执行 3 次递增操作,此时 nums = [4,4,8,13] 。
4 是数组中最高频元素,频数是 2 。
- 对第二个元素执行 4 次递增操作,此时 nums = [1,8,8,13] 。
8 是数组中最高频元素,频数是 2 。
- 对第三个元素执行 5 次递增操作,此时 nums = [1,4,13,13] 。
13 是数组中最高频元素,频数是 2 。示例 3:
输入:nums = [3,9,6], k = 2
输出:1提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^5
1 <= k <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/frequency-of-the-most-frequent-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 对数字进行排序(只有小的数能通过操作变成大的数),并求前缀和
  • 二分求解最大频次
  • 每次二分的时候,遍历一次前缀和数组,以某位置为最大频数的数字,能不能满足要求?根据结果,调整区间

类似题目:
LeetCode 1231. 分享巧克力(极小极大化 二分查找)

class Solution {int ans = 1;
public:int maxFrequency(vector<int>& nums, int k) {sort(nums.begin(), nums.end());vector<long> presum(nums.size()+1);for(int i = 1; i <= nums.size(); ++i)presum[i] = presum[i-1]+nums[i-1];int l = 1, r = 1e5, mid;while(l <= r){mid = l+((r-l)>>1);if(ok(nums, presum, mid, k))//在最大频数为mid的时候,能做到吗?{ans = mid;//能l = mid+1;}elser = mid-1;}return ans;}bool ok(vector<int>& nums, vector<long>& presum, long freq, int k){for(int i = freq; i < presum.size(); i++){if(presum[i]-presum[i-freq]+k >= nums[i-1]*freq)// 包含 i 位置在内的前面 freq 个数字都变成 i 位置处的数字,能做到吗return true;}return false;}
};

272 ms 84 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1838. 最高频元素的频数(二分查找)相关推荐

  1. leetcode 1838. 最高频元素的频数

    元素的 频数 是该元素在一个数组中出现的次数. 给你一个整数数组 nums 和一个整数 k .在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 . 执行最多 k 次操作后 ...

  2. leetcode:1838. 最高频元素的频数【排序 + 前缀和 + 二分 + 思维】

    分析 由于只能通过加得到某个频数 因为求的是频数,所以二分频数 频数也作为自变量,而最少操作次数成为了因变量 问题的关键就是在给定频数的情况下,求出最少操作数 因为频数越大的话,最少操作数肯定是越大的 ...

  3. 1838.最高频元素的频数

    思路:一开始我是使用暴力解法,先排序,一个一个元素遍历,从该元素最近的一个数(左边)往左求它们的差值和直到超出了目标值k,再存所包含的最大元素个数,然后就超出时间限制了: class Solution ...

  4. LeetCode 1231. 分享巧克力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分享这块巧克力,所以你 ...

  5. LeetCode:数组(排列组合,二分查找I,二分查找II)

    1,排列组合 38,剑指Offer:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. class Solution {Li ...

  6. LeetCode 1901. 找出顶峰元素 II(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 一个 2D 网格中的 顶峰元素 是指那些 严格大于 其相邻格子(上.下.左.右)的元素. 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中 ...

  7. LeetCode 483. 最小好进制(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 对于给定的整数 n, 如果 n 的 k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制. 以字符串的形式给出 n, ...

  8. LeetCode LCP 28. 采购方案(排序 + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 小力将 N 个零件的报价存于数组 nums. 小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案. 注 ...

  9. LeetCode 1818. 绝对差值和(二分查找)

    文章目录 1. 题目 2. 解题 前三题,拼手速.最后一题暴力超时. 1. 题目 给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差 ...

最新文章

  1. 解决博客园模版错误排版的一个问题
  2. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之76——BREW中的安全性网络编程...
  3. java(4)——数据类型中的数值型的浮点数
  4. 学Ruby开发的几个好网站
  5. 病毒的手工排除与分析(更新完毕)
  6. method java_解析Java中的Field类和Method类
  7. javascript 滚动+停留 代码
  8. layui 解决浏览器自动填充form表单账号和密码输入框的问题
  9. ADO.Net(一)——增、删、改、查
  10. loadrunner 操作mysql_loadrunner动态从mysql取值
  11. Freeswitch在内网,由服务器防火墙映射出来,IMSDROID作为被叫的问题
  12. [算法笔记]NPC问题证明sample
  13. 解决win10声卡驱动不兼容问题和成功安装战神k650-i5-d2上的Sound Blaster Cinema2在win10系统上
  14. 学习利用ce修改游戏生命参数
  15. staf框架_测试自动化以及与STAF / STAX的持续集成
  16. html海南地图插件,Echarts 地图(map)插件之 鼠标HOVER和tooltip自定义数据
  17. 最新html取消dynsrc属性无效,Html属性标签 - osc_5aj0jo70的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. STM32串口通信的 USART_ClearFlag(USART1,USART_FLAG_TC); 添加后程序出现bug;( USART_ClearFlag(USART_TypeDef* USART)
  19. uni-app开发微信小程序使用腾讯地图选点和城市选择器插件
  20. 试试kaggle竞赛:辨别猫狗

热门文章

  1. 【Mysql】数据库主从搭建-基于docker
  2. 计算机科学和建筑设计结合,智能化建筑中计算机科学与技术的应用
  3. 带通滤波器作用和用途_带通滤波器作用
  4. access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
  5. oracle 如何查看当前用户的表空间名称
  6. C++的运算符重载(转)
  7. 【Flask模板】include标签
  8. 调用exe文件(一般处理登陆安全窗口)+睡眠等待(--------------------)
  9. 解决一个驱动代码解耦合问题
  10. Linux 开发者最应该知道的命令汇总