Leetcode2528. 最大化城市的最小电量

leetcode2528. 最大化城市的最小电量 推荐使用开区间写二分。下面代码采用开区间二分,这仅仅是二分的一种写法,使用闭区间或者半闭半开区间都是可以的,喜欢哪种写法就用哪种。座供电站,你需要决定这些供电站分别应该建在哪里,这些供电站与已经存在的供电站有相同的供电范围。左侧的城市已经处理好了,所以建造的电站越靠右越好,尽可能多地覆盖没遍历到的城市。,如果以最优策略建造额外的发电站,返回所有城市中,最小电量的最大值是多少。我们要一边做差分更新,一边计算差分数组的前缀和,以得到当前城市的实际电量。由于已经建造的电站是可以发电的,我们需要在二分之前,用。 阅读详情

Every day a Leetcode

题目来源:2528. 最大化城市的最小电量

解法1:二分查找 + 前缀和 + 差分数组

看到「最大化最小值」或者「最小化最大值」就要想到二分答案,这是一个固定的套路。

为什么?一般来说,二分的值越大,越能/不能满足要求;二分的值越小,越不能/能满足要求,有单调性,可以二分。

二分答案 minPower,从左到右遍历 stations,如果 stations[i] 电量不足 minPower,那么需要建供电站来补足。

在哪建供电站最好呢?

由于 i 左侧的不需要补足,所以贪心地在 min⁡(i+r,n−1) 处建是最合适的,恰好让 i 在覆盖范围的边界上。

设需要建 m 个供电站,那么需要把 [i,min⁡(i+2r,n−1)] 范围内的电量都增加 m。

方法很多,用差分数组来更新是最简单的。

最后判断修建的供电站是否超过 k,如果超过说明 minPower 偏大,否则说明偏小。

代码:

/*
 * @lc app=leetcode.cn id=2528 lang=cpp
 *
 * [2528] 最大化城市的最小电量
 */

// @lc code=start
class Solution
{
public:
    long long maxPower(vector<int> &stations, int r, int k)
    {
        int n = stations.size();
        vector<long long> preSum(n + 1, 0);
        long long diff[n];
        vector<long long> power(n, 0);

        // 求前缀和
        for (int i = 1; i <= n; i++)
            preSum[i] = preSum[i - 1] + stations[i - 1];
        // 求电量
        for (int i = 0; i < n; ++i)
            power[i] = preSum[min(i + r + 1, n)] - preSum[max(i - r, 0)];

        auto check = [&](long long min_power) -> bool
        {
            memset(diff, 0, sizeof(diff)); // 重置差分数组
            long long sum_d = 0, need = 0;
            for (int i = 0; i < n; i++)
            {
                sum_d += diff[i]; // 累加差分值
                long long m = min_power - power[i] - sum_d;
                if (m > 0)
                { // 需要 m 个供电站
                    need += m;
                    if (need > k)
                        return false; // 提前退出这样快一些
                    sum_d += m;       // 差分更新
                    if (i + r * 2 + 1 < n)
                        diff[i + r * 2 + 1] -= m; // 差分更新
                }
            }
            return true;
        };

        // 二分查找,开区间写法
        long long left = *min_element(power.begin(), power.end());
        long long right = left + k + 1;
        while (left + 1 < right)
        {
            long long mid = left + (right - left) / 2;
            if (check(mid))
                left = mid;
            else
                right = mid;
        }
        return left;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(nlogk),其中 n 为数组 stations 的长度。二分需要循环 O(log⁡k) 次。

空间复杂度:O(n),其中 n 为数组 stations 的长度。

使用sklearn学习多项式回归(三) 1,什么是线性 我们无数次提到”线性“这个名词。在支持向量机中,我们也曾经提到最初的支持向量机只能够分割线性可分的数据,然后引入了”核函数“来帮助我们分类那些非线性可分的数据。我们也曾经说起过,比如说决策树,支持向量机是”非线性“模型。所有的这些概念,让我们对”线性“这个词非常熟悉,却又非常陌生——因为我们并不知道它的真实含义。接下来我们看看线性回归模型改进的核心之一:帮助线性回归解决非线性问题。 1.1,变量之间的线性关系 ”线性“这个词用于描述不同事物时有着不同的含义。我们最常使用的线性是指“变量 阅读详情

相关推荐

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 348

Differential

之前我有一篇 《差分+前缀和》的学习笔记,记录了差分的思想和基本用法。这里就只记录灵神题单的刷题记录。

lyh20021209的博客 537

K型热电偶负电压采集难题?3种运放电路设计方案对比(含Multisim仿真)

本文针对K型热电偶在低温测量中产生的负电压采集难题,详细对比了三种运放电路设计方案,包括双电源运放反相放大、单电源仪表放大器和差分放大电路,并结合Multisim仿真数据分析了各方案的性能差异。文章还提供了PCB布局和抗干扰设计的实战技巧,帮助工程师解决热电偶信号采集中的核心挑战。

postgres8guard的博客 1020

LeetCode 2528. 最大化城市的最小电量

给你一个下标从开始长度为n的整数数组stations,其中表示第i座城市的供电站数目。每个供电站可以在一定内给所有城市提供电力。换句话说,如果给定的范围是r,在城市i处的供电站可以给所有满足且的城市j供电。|x|x一座城市的是所有能给它供电的供电站数目。政府批准了可以额外建造k座供电站,你需要决定这些供电站分别应该建在哪里,这些供电站与已经存在的供电站有相同的供电范围。给你两个整数r和k,如果以最优策略建造额外的发电站,返回所有城市中,最小电量的最大值是多少。这k座供电站可以建在多个城市。5。

m0_56090828的博客 1287

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

Zemax非序列模式微透镜阵列仿真:从建模到优化完整指南

光线追迹是光学系统仿真的核心技术,其原理基于几何光学与物理光学的光线传播模型,通过精确计算光线在光学元件中的折射、反射与散射路径,实现对系统性能的预测与评估。在微透镜阵列等复杂多通道光学系统中,传统序列模式因光线路径受限而难以准确模拟串扰与杂散光,非序列光线追迹技术则凭借其灵活的空间传播机制成为关键手段。该技术广泛应用于激光整形、光束匀化、3D传感及光场成像等领域,能够有效支持阵列结构设计与优化。Zemax非序列模式为微透镜阵列仿真提供了完整的建模、优化与公差分析流程,是光学工程师进行复杂系统设计的核心工具

weixin_29967003的博客 339

leetcode:2528. 最大化城市的最小供电站数目【二分 + 贪心 + 差分数组 + 前缀和】

二分 + 贪心 + 差分数组

小楼一夜听春雨 354

比亚迪开放平台接口实战:车身状态监测与智能车联应用开发

本文详细介绍了如何利用比亚迪开放平台的车身状态接口进行智能车联应用开发。通过核心类BYDAutoBodyworkDevice,开发者可以安全获取车辆VIN、车门车窗状态、蓄电池电压、方向盘转角等实时数据,并利用监听器实现状态实时响应。文章提供了从SDK集成、接口调用到典型应用场景(如远程车况检查、车队管理)的完整实战指南,助力开发者快速构建基于比亚迪车辆数据的创新应用。

weixin_29176179的博客 731

最大化最小值 / 最小化最大值 - 算法套路总结

摘要 二分法是解决"最大化最小值"和"最小化最大值"类问题的有效方法。其核心思想是将原问题转换为"判断某个值是否可行",利用单调性进行二分搜索。解题分为四步:1)识别问题类型;2)确定搜索范围;3)设计检查可行性的check函数;4)实现二分主循环。典型案例包括木材切割和任务分配问题。该方法通过将复杂问题简化为可行性验证,显著降低了计算复杂度,时间复杂度通常为O(n log M),其中n是数据规模,M是可能答案范围。 (148字)

goodparty的专栏 2693

UG\NX二次开发 替换部件引用集UF_ASSEM_replace_refset

替换部件引用集UF_ASSEM_replace_refset,需要替换成“完整部件(Entire Part)”需要第三个参数传入空指针或者空字符串。

王牌飞行员_里海的博客 255

【AI编程】Vibe Coding 开发环境搭建与项目实战操作详解

Vibe Coding 开发环境搭建与项目实战操作详解

congge 7344

LeetCode 2016 37,65,212,84,130,218

37 Sudoku Solver // ----------------Seeing Discuss----------- /* copying codes url https://discuss.leetcode.com/topic/5002/a-simple-dfs-solution Analysis: */ class Solution { public: bool is

Batman_的博客 16万+

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2535

力扣2528.最大化城市的最小电量

题目要求找到所有城市电量最小值的最大电量为给城市供电的发电站数量因此每座城市的表示,即前缀和二分最低电量时如果当前城市电量不够,,应该是在,因为建立发电站可以用差分优化。

Pisasama的博客 481

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode | 2528. 最大化城市的最小电量

摘要: 题目要求在给定城市供电站数组stations和供电范围r的情况下,通过新增最多k座供电站,最大化所有城市中最小电量的值。采用二分查找确定可能的最小电量最大值,结合贪心策略验证候选值:计算每个城市的初始电量(使用前缀和优化),并通过队列动态跟踪新增供电站的影响范围。每次优先在最右侧添加供电站以覆盖更多城市,确保总添加数不超过k。时间复杂度为O(n log(max_base + k)),空间复杂度O(n),适用于大规模数据。

张较瘦 278

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

千问 LeetCode 2528.最大化城市的最小电量 JavaScript实现

2. 差分数组优化区间更新:当需要在 [i, i + 2r] 区间统一加 need 时,只需在 diff[end] -= need,遍历时累加 sumD 就能得到当前城市的额外电量。// 在 i + r 处建 need 座电站,影响范围 [i, i + 2r]console.log(maxPower([1,2,4,5,0], 1, 2));// 当前城市电量直接补足。// 1. 计算每个城市的初始电量(前缀和)

m0_37843156的博客 153

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

2528. 最大化城市的最小电量(leetcode每日一题)

需要用差分数组记录区间的统一变化,了解差分数组的性质。

yagamiraito_的博客 210

千问 LeetCode 2528.最大化城市的最小电量 public long maxPower(int[] stations, int r, int k)

城市 i 的电量 = presum[min(i + r + 1, n)] - presum[max(i - r, 0)]。- 需要补建 add = minPower - 当前电量 座电站,用差分数组在 [i, i + 2r] 区间加上 add。这道题是LeetCode 2528,最大化城市的最小电量,是一道典型的 二分答案 + 差分数组 + 贪心 的困难题。- 贪心策略:在 i + r 处建电站最划算,这样它能覆盖到 [i, i + 2r] 范围。// 计算每个城市的初始电量。

m0_37843156的博客 18

【前缀和 二分查找 差分数组】2528最大化城市的最小供电站数目

给你一个下标从 0 开始长度为 n 的整数数组 stations ,其中 stations[i] 表示第 i 座城市的供电站数目。 每个供电站可以在一定 范围 内给所有城市提供电力。换句话说,如果给定的范围是 r ,在城市 i 处的供电站可以给所有满足 |i - j|

闻缺陷则喜何志丹 3651

leetcode 2528(二分查找+滑动窗口+差分数组)

如果存在一种方案,可以让所有城市的电量都 ≥low,那么也可以 ≥ low−1 或者更小的值(要求更宽松)。如果不存在让所有城市的电量都 ≥low 的方案,那么也不存在 ≥ low+1 或者更大的方案(要求更苛刻)。给定 low,是否存在建造 k 座额外电站的方案,使得所有城市的电量都 ≥low?建k 座电站,范围内城市+k 电量;long long low 输入:当前二分的下限值。如果存在,说明答案 ≥low,否则答案 <low。座供电站的前提下,让每座城市的供电量都不低于。low的范围,二分查找确定。

2301_77892984的博客 241

2025.11.07 力扣每日一题

本文提出了一种解决"最大化城市最小供电量"问题的高效算法。方法采用二分查找确定可能的最小供电量最大值,结合贪心策略和差分数组优化计算。具体实现分为:1)利用差分数组预处理初始供电量;2)设计检查函数验证目标值可行性,通过贪心策略在最右侧补建电站以最大化覆盖范围;3)采用二分框架快速搜索最优解。该算法的时间复杂度为O(n log S),其中n为城市数,S为可能的供电量范围,显著优于暴力解法,能够高效处理大规模数据。

2301_80146401的博客 413

LeetCode每日一题(2528. Maximize the Minimum Powered City)

通过 binary search 来查找最终结果, 提示里说检查的方法用到了 Line Sweep, 查了一下, 还是没看出来这里怎么用 Line Sweep, 我觉得更像是 Sliding Window。检查时如果某个城市的电量达不到目标值, 那我们就需要建电站,所建的位置应该是当前位置+辐射半径, 因为前面遍历过的城市的电量一定是可以达到目标值的, 所以给他们增加电量并不会给带来额外的好处。但是后面的城市可能会出现电力不足的情况, 所以我们应该向后建,并保证当前位置是其辐射范围的最左侧即可。

wangjun861205的博客 569

力扣每日一题(三)滑动窗口中位数 + 搜索染色 + 二分答案

本文介绍了几道leetcode算法问题的解决思路。295题使用双堆维护中位数;480题在滑动窗口中用懒删除堆处理元素移除。3607题通过DFS染色和懒删除堆或离线算法处理电网维护问题。1611题利用二进制递归/递推计算整数变为0的最少操作次数。2528题采用二分答案和差分数组优化城市电量分配。417题通过反向BFS搜索处理水流路径问题。这些方法涵盖了堆应用、离线处理、二进制位运算和搜索算法等典型解题技巧。

nju_spy的博客 932

LeetCode第95场双周赛

2023.1.7LeetCode第95场双周赛

shenyuhan的博客 360

LeetCode 2772. 使数组中的所有元素都等于零

遍历数组的同时,用变量 sumD 累加差分值(

m0_56090828的博客 1364

LeetCode 每日一题 2025/11/3-2025/11/9

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 470
上一篇: Leetcode1109. 航班预订统计
下一篇: Leetcode2772. 使数组中的所有元素都等于零
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值