文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 暴力超时
    • 2.2 二分查找

1. 题目

给定一个包含 n 个整数的数组,找到最大平均值连续子序列,且长度大于等于 k。并输出这个最大平均值。

样例 1:
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释:
当长度为 5 的时候,最大平均值是 10.8,
当长度为 6 的时候,最大平均值是 9.16667。
所以返回值是 12.75。注释 :
1 <= k <= n <= 10,000。
数组中的元素范围是 [-10,000, 10,000]。
答案的计算误差小于 10-5 。

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

2. 解题

2.1 暴力超时

59 / 74 个通过测试用例

class Solution {public:double findMaxAverage(vector<int>& nums, int k) {int n = nums.size(), i, j, s;double maxAVG = INT_MIN, avg;vector<int> sum = nums;for(i = 1; i < n; ++i)sum[i] = sum[i-1] + nums[i];for(i = 0; i <= n-k; ++i)for(j = i+k-1; j < n; ++j){if(i == 0)s = sum[j];elses = sum[j]-sum[i-1];avg = s/double(j-i+1);if(avg > maxAVG)maxAVG = avg;}return maxAVG;}
};

2.2 二分查找

class Solution {public:double findMaxAverage(vector<int>& nums, int k) {double l = -10000, r = 10000, mid, ans;while(r-l > 1e-6){mid = (l+r)/2.0;if(isok(nums, mid, k)){l = mid;ans = mid;}elser = mid;}return ans;}bool isok(vector<int> nums, double avg, int k){   //存在长度至少为k,且均值 >= avg 吗?double sum = 0, prev = 0, minprev = 0;//前面最小的前缀和0(长度为0时)for(int i = 0; i < k; ++i)sum += nums[i]-avg;//每个数减去平均值,求和 >= 0 存在即okif(sum >= 0) return true;for(int i = k; i < nums.size(); ++i){sum += nums[i]-avg;prev += nums[i-k]-avg;minprev = min(minprev, prev);//前面最小的和(减去avg后的)if(sum-minprev >= 0)//存在区间,使得减去avg后sum>=0return true;}return false;}
};

208 ms 90.3 MB


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

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

LeetCode 644. 最大平均子段和 II(二分查找)*相关推荐

  1. 59. Leetcode 81. 搜索旋转排序数组 II(二分查找-局部有序)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同.在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使 ...

  2. leetcode 81. 搜索旋转排序数组 II(二分查找)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 , ...

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

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

  4. LeetCode - 644 子数组最大平均数 II

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 644. 子数组最大平均数 II - 力扣(LeetCode) 题目描述 给定一个包含 n 个整数的数组nums,找到最大平均值的连 ...

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

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

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

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

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

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

  8. LeetCode 1235. 规划兼职工作(动态规划+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你打算利用空闲时间来做兼职工作赚些零花钱. 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 ...

  9. LeetCode 1062. 最长重复子串(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定字符串 S,找出最长重复子串的长度.如果不存在重复子串就返回 0. 示例 1: 输入:"abcd" 输出:0 解释:没有重复子串. ...

最新文章

  1. vue weex 调用原生toast_vue-template-compiler 还能这么用
  2. epoll和select区别
  3. 开启 J2EE(七)— Model1、Model2和三层架构的演变
  4. weblogic从入门到飞起(部署应用、日志)(六)
  5. @description iPhoneX炫彩渐变背景实现
  6. 小姐姐:如何参与大型开源项目-Taro 共建
  7. xadmin与mysql数据库_十八、Django3.0学习之引入xadmin
  8. android标题栏消失,安卓标题栏为什么没有显示
  9. mybatis3 中 @Provider 的使用方式
  10. 说说计算机发展史在你印象里都有哪些内容,《老王》导学案及答案
  11. 领域驱动 开源项目_在开源领域建立职业的建议
  12. 【STM32】FLASH擦写+FLASH相关操作+注意事项
  13. 利用xsl和xml转html没有内容_HTML文档元素的属性介绍
  14. win10右击菜单在左边
  15. python下载互联网上的的图片
  16. 微信H5页面自定义微信分享内容
  17. 企业新闻媒体资源有哪些类型?从哪里找?
  18. python画一片树叶的故事_《Python数据分析与机器学习实战-唐宇迪》读书笔记第7章--决策树...
  19. 使用Python实现日历功能
  20. php7 获取客户端 ip 地址

热门文章

  1. 在idea中使用git管理你的项目
  2. 【Kubernetes】k8s 的基本使用指令
  3. 注意:匿名函数调用直接加载函数名setInterval(move,30)
  4. 热血街头Java,下载_我爱法语 V3.01 多国语言版_6z6z下载站
  5. pb retrieve时停止工作_大佬们挂在嘴边的PE、PB是什么?
  6. S5PV210的地址映射图
  7. 进阶攻略|前端最全的框架总结
  8. Android WebView常见问题及解决方案汇总【很全很实用】
  9. 解析统计文本文件中的字符数、单词数、行数。
  10. C#-类-string/Manth/Random/DateTime-及练习