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

文章目录

    • 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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础学习总结

1.python历史 Guido 89年圣诞开写 91年编辑器问世 优点与缺点 优点&#xff1a;简单、易学、免费开源、高层语言 可移植、解释、面向对象、扩展 丰富库、规范代码 缺点&#xff1a;运行速度、国内市场小、中文资料少 2.模式&#xff1a;文本、交互、集成开发 程序原理&am…

学生管理系统代码赏析

# 添加、删除、显示学生信息&#xff08;保存&#xff09; # 保存所有学生信息 students {} # 创建 ID 1000 # 控制系统是否退出 flag True # 从文件中读取学生信息 def load_students(): # 加载学生信息从文件中 stu_file open("students.txt",&quo…

LeetCode 527. 单词缩写(Trie树)

文章目录1. 题目2. 解题1. 题目 给定一个由n个不重复非空字符串组成的数组&#xff0c;你需要按照以下规则为每个单词生成最小的缩写。 初始缩写由起始字母省略字母的数量结尾字母组成。若存在冲突&#xff0c;亦即多于一个单词有同样的缩写&#xff0c;则使用更长的前缀代替…

POJ 1523 SPF (割点 点双连通分量)

题意&#xff1a;求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索&#xff0c;定义DFS(u)为u在搜索树&#xff08;以下简称为树&#xff09;中被遍历到的次序号。定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点&…

质数——python代码赏析

一、求&#xff08;2—您输入数字&#xff09;之间的质数&#xff1a; num int(input("请输入您要输入的数字:"))a[] if num 2:a.append(2) elif num >2:for i in range(2,num1):for j in range(2,i):if i %j 0:breakelse:a.append(i)print(a) 二、求2-100之间…

LeetCode 1199. 建造街区的最短时间(优先队列贪心)

文章目录1. 题目2. 解题1. 题目 你是个城市规划工作者&#xff0c;手里负责管辖一系列的街区。在这个街区列表中 blocks[i] t 意味着第 i 个街区需要 t 个单位的时间来建造。 由于一个街区只能由一个工人来完成建造。 所以&#xff0c;一个工人要么需要再召唤一个工人&…

用Android-X86和VirtualBox打造高性能Android开发环境

现在已经采用genymotion替换下面的方法 https://www.genymotion.com转载于:https://www.cnblogs.com/sunzhuo1228/archive/2013/05/30/3109445.html

LeetCode 1088. 易混淆数 II(回溯/BFS)

文章目录1. 题目2. 解题2.1 回溯2.2 BFS1. 题目 本题我们会将数字旋转 180 来生成一个新的数字。 比如 0、1、6、8、9 旋转 180 以后&#xff0c;我们得到的新数字分别为 0、1、9、8、6。 2、3、4、5、7 旋转 180 后&#xff0c;是 无法 得到任何数字的。 易混淆数&#xf…

python——import导入模

1.import 搜索路径 import sys sys.path 路径搜索 从上⾯列出的⽬录⾥依次查找要导⼊的模块⽂件 表示当前路径 程序执⾏时导⼊模块路径 sys.path.append(/home/itcast/xxx) sys.path.insert(0, /home/itcast/xxx) #可以确保先搜索这个路径 I…

timer.schedule定时器用法

Timer是一种定时器工具&#xff0c;用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类&#xff0c;它的子类代表一个可以被Timer计划的任务。 schedule的意思&#xff08;时间表、进度表&#xff09; timer.schedule(new MyTas…

LeetCode 759. 员工空闲时间(排序)

文章目录1. 题目2. 解题1. 题目 给定员工的 schedule 列表&#xff0c;表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表&#xff0c;这些时间段已经排好序。 返回表示 所有 员工的 共同&#xff0c;正数长度的空闲时间 的有限时间段的列表&#xf…

python——作用域 == is

作⽤域 test.py num 200 def print_num(): print("----print_num func, num%d----"%num) main.py from test import * num 100 def print_num2(): print("----print_num2 func, num%d----…

U-Boot-2009-03移植笔记(移植准备)

因为工作需要&#xff0c;需要在S3C2440板子上移植U-boot和Linux&#xff0c;虽然关于S3c2440移植的文章比较多&#xff0c;但是毕竟全面的不多&#xff0c;而且都是别人的&#xff0c;这次自己动手&#xff0c;以此系列记录全过程。 U-boot1.1.6中有支持smdk2410的代码&#x…

LeetCode 656. 金币路径(DP)

文章目录1. 题目2. 解题1. 题目 给定一个数组 A&#xff08;下标从 1 开始&#xff09;包含 N 个整数&#xff1a;A1&#xff0c;A2&#xff0c;……&#xff0c;AN 和一个整数 B。 你可以从数组 A 中的任何一个位置&#xff08;下标为 i&#xff09;跳到下标 i1&#xff0c;i…

python中的深浅拷贝

1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是&#xff1a;拷贝了引⽤&#xff0c;并没有拷贝内容 浅拷贝只复制第一层数据&#xff0c;更深层的引用不管。 2. 深拷贝 copy.deepcopy 深拷贝是对于⼀个对象所有层次的拷贝(递归) 、 3. 注意点浅…

邻接矩阵的深度优先遍历

废话不多说&#xff0c;直接看代码 t#include<stdio.h> #include<stdlib.h> #include<string.h> #define INFINITY INT_MAX #define MAX_VERTEX_NUM 20 bool visted[MAX_VERTEX_NUM]; typedef char VertexType; typedef int VRType; typedef int QElemT…

Linux中使用GDB调试NS2

在使用ns2过程中&#xff0c;避免不了要修改或者添加一些模块&#xff0c;对C代码进行改动。编写好自己的功能模块以后&#xff0c;进行编译执行。但通常不会这么容易通过&#xff0c;经常会出现编译可以通过&#xff0c;但执行是会出错。比较常见的是“段错误”&#xff0c;因…

LeetCode 291. 单词规律 II(回溯)

文章目录1. 题目2. 解题1. 题目 给你一种规律 pattern 和一个字符串 str&#xff0c;请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循&#xff0c;例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间&#xff0c;存在着双向连接的对应规律。 示例1:…

python中的可迭代对象

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语…