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

【差分数组】2772. 使数组中的所有元素都等于零|2029 给你一个下标从 0 开始的整数数组 nums 和一个正整数 k 。 你可以对数组执行下述操作 任意次 : 从数组中选出长度为 k 的 任一 子数组,并将子数组中每个元素都 减去 1 。 如果你可以使数组中的所有元素都等于 0 ,返回 true ;否则,返回 false 。 子数组 是数组中的一个非空连续元素序列。 阅读详情

Every day a Leetcode

题目来源:2772. 使数组中的所有元素都等于零

解法1:差分数组

令差分数组 diff[i] = nums[i] - nums[i - 1],特别地,diff[0] = nums[0],diff[n] = -nums[n-1]。

可以发现,差分数组具有以下性质:

  1. 原数组中所有元素都等于零,等价于差分数组中所有元素都等于零。
  2. 如果我们将原数组中以 nums[i] 为开头且长度为 k 的子数组中每个元素 -1,等价于 diff[i]-1,diff[i+k]+1。这样我们就将子数组的运算转化为了单个元素的运算。

考虑 diff[i](0<=i<=n-k):

  • 如果 diff[i]<0,因为不存在下标 −k 所以无解。
  • 如果 diff[i]>0,我们需要对 diff[i] 进行 -1 操作把它变成 0,同时将 diff[i+k] += diff[i]。

最后遍历数组 diff,全为 0 返回 true,否则返回 false。

代码:

/*
 * @lc app=leetcode.cn id=2772 lang=cpp
 *
 * [2772] 使数组中的所有元素都等于零
 */

// @lc code=start

// 差分数组

class Solution
{
public:
    bool checkArray(vector<int> &nums, int k)
    {
        int n = nums.size();
        // 计算差分数组
        vector<int> diff(n + 1, 0);
        diff[0] = nums[0];
        for (int i = 1; i < n; i++)
            diff[i] = nums[i] - nums[i - 1];
        diff[n] = -nums[n - 1];
        // 从左到右对差分数组里的每个元素进行操作
        for (int i = 0; i + k <= n; i++)
            if (diff[i] > 0)
            {
                diff[i + k] += diff[i];
                diff[i] = 0;
            }
        // 检查差分数组中是否所有元素均为 0
        for (int i = 0; i <= n; i++)
            if (diff[i] != 0)
                return false;
        return true;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的元素个数。

空间复杂度:O(n),其中 n 是数组 nums 的元素个数。

COLMAP性能优化实战:如何用GPU加速和并行计算让重建速度提升300% 本文详细介绍了如何通过GPU加速、并行计算和参数调优显著提升COLMAP的三维重建效率。从硬件资源分配到计算流程优化,再到大型数据集的分块处理策略,全面解析了将重建速度提升300%以上的实用技巧,特别适合处理无人机航拍和室内扫描等大规模三维重建项目。 阅读详情

相关推荐

Dynamics 365 F&O新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

本文详细介绍了如何在Visual Studio 2019中为Dynamics 365 Finance and Operations搭建企业级项目框架,包括Model分层策略、Solution管理及开发工作流优化。特别提供了Model避坑指南和实用配置建议,帮助新手快速上手并避免常见错误。

weixin_30505225的博客 382

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

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

m0_56090828的博客 1364

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1334

【LeetCode】2357. 使数组中所有元素都等于零

D87 方法一:排序+模拟;方法二:哈希表(值得学习);简单

weixin_43894455的博客 548

AI重塑运营商CRM:从传统办理到智能推荐的实战经验

本文探讨了AI技术如何重塑运营商CRM系统,从传统办理模式升级为智能推荐平台。文章首先分析了传统CRM系统在产品推荐效率、客户信息录入、业务流程和个性化服务等方面的痛点,提出AI赋能的解决方案。技术架构采用分层设计,包含智能推荐引擎、知识图谱系统和大模型集成三大核心模块。实战案例详细介绍了基于深度学习的智能推荐系统实现,包括用户行为特征提取、产品特征建模、推荐模型训练和实时推荐服务等关键组件代码实现,展示了AI如何提升运营商CRM系统的智能化水平和服务效率。

技术传感器的博客 1050

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

周赛353(模拟、记忆化搜索==>动态规划、差分)

返回所有可达成数字中的最大值。可以证明至少存在一个可达成数字。如果你可以使数组中的所有元素都等于。是数组中的一个连续非空元素序列。是数组中的一个非空连续元素序列。在一步操作中,你可以从下标。跳跃到任意满足下述条件的下标。可以在执行下述操作不超过。你的任务是使用最优策略为。你可以对数组执行下述操作。让我们定义另一个下标从。以整数形式表示并返回。

qq_42958831的博客 308

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

Leetcode---353周赛

Leetcode---353周赛详解

V_zjs的博客 528

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 102

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 492

leetcode--第 353 场周赛

转移时,对于f(i),如果 nums1(i)≥nums1(i−1),则转移 f(i)=max(f(i),f(i−1)+1);设状态 f(i) 表示遍历到下标 i 且 nums3(i) 为 nums1(i) 时的最长非递减子数组,g(i) 表示遍历到下标 i 且 nums3(i) 为 nums2(i) 时的最长非递减子数组。转移时,对于 f(i)f(i),枚举 0≤j

qq_64289808的博客 211

Win11下VSCode配置Python虚拟环境:从venv原理到高效开发实战

Python虚拟环境是解决项目依赖冲突、保障环境隔离性的核心技术,其核心原理是通过创建独立的Python解释器与包目录,实现不同项目间的依赖隔离。在工程实践中,虚拟环境能确保开发、测试与部署环境的一致性,提升代码的可复现性与团队协作效率。对于Windows 11平台下的Python开发者,结合轻量强大的VSCode编辑器,可以构建一套标准化的开发工作流。本文以Python内置的venv模块为例,详解如何在VSCode中创建、激活与管理虚拟环境,并配置自动化终端激活、代码格式化(如autopep8)与调试功能

weixin_33693070的博客 427

leetcode刷题类型

【代码】leetcode刷题类型。

weixin_53102215的博客 269

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【力扣周赛】第 362 场周赛(⭐差分&匹配&状态压缩DP&矩阵快速幂优化DP&KMP)

斜着走,一步顶两步——相当于可以同时横着走和竖着走。那么只要满足垂直和水平方向中最长的那个距离就好了。排序之后按顺序枚举,每次比较和上个区间结束位置之间的关系。注意有个特例是:只走一步时,如果起点和终点相同就不可以了。

小威的博客 804

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode笔记:Weekly Contest 353

LeetCode笔记:Weekly Contest 353

codename_cys的博客 375

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

算法题 - 差分数组

对于数组a, 定义其差分数组为dia0i0ai−ai−1i≥1\right.dia0i0ai−ai−1i≥1​性质1: 从左到右累加d中的元素,可以得到数组a.性质2: 如下两个操作是等价的。把a的子数组a[i], a[i+1],⋯\cdots⋯, a[j]都加上x.把d[i]增加x, 把d[j + 1]减少x.

qq_34826149的博客 860

LeetCode 728. 自除数题解

728. 自除数题解 题目来源:728. 自除数 2022.03.31 每日一题

小明不要写Bug的博客 730

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

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

m0_56090828的博客 1287

[SDUT](2772)数据结构实验之串一:KMP简单应用 ---KMP(串)

数据结构实验之串一:KMP简单应用 Time Limit:1000MSMemory Limit:65536KB SubmitStatisticDiscuss Problem Description 给定两个字符串string1和string2,判断string2是否为string1的子串。 Input 输入包含多组数据,每组测...

111

LeetCode 1893. 检查是否区域内所有整数都被覆盖

给你一个二维整数数组ranges和两个整数left和right。每个表示一个从starti到endi的。如果闭区间内每个整数都被ranges中区间覆盖,那么请你返回true,否则返回false。已知区间,如果整数x满足,那么我们称整数x被覆盖了。true2 到 5 的每个整数都被覆盖了:- 2 被第一个区间覆盖。- 3 和 4 被第二个区间覆盖。- 5 被第三个区间覆盖。false21 没有被任何一个区间覆盖。提示 1提示 2。

m0_56090828的博客 391

每日一题(2022-04-16)——最大回文数乘积

目录479. 最大回文数乘积题目描述:题解:超时:正解: 479. 最大回文数乘积 题目描述: 给定一个整数 n,返回 可表示为 两个n位整数 乘积 的 最大回文整数 。 因为答案可能非常大,所以返回它对 1337 取余 。 例子1: 输入:n = 2 输出:987 解释:99 x 91 = 9009, 9009 % 1337 = 987 例子2: 输入: n = 1 输出: 9 题解: 超时: func largestPalindrome1(n int) int { // eg: n=2 mi

脑袋装水的博客 407

动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100

将一个复杂问题拆分成多个规模更小的子问题,通过保存子问题的计算结果,避免重复计算,最终得到原问题的答案。先看一个经典问题。dp[i] = 以第 i 个元素结尾的最优结果例如最长递增子序列。最长递增子序列不一定以最后一个元素结尾,因此必须遍历整个数组取最大值。dp[i] = 前 i 个元素的最优结果这种情况下,最终答案通常就是dp[n]。关键在于理解 dp 数组的定义。动态规划的核心并不是背诵某个固定模板,而是建立正确的状态定义,并通过状态转移方程解决问题。dp[i] 或 dp[i][j] 表示什么?

zengjiajun2006的博客 889

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 227

力扣73 矩阵置零

该解法通过标记含0的行和列来实现矩阵置零。遍历矩阵,用布尔数组记录有0的行和列;再遍历一次,若当前行或列被标记,则置为0。时间复杂度O(mn),空间复杂度O(m+n)。

Pniubi的博客 36

LeetCode Hot 100 二叉树专题(三):BST 二叉搜索树与右视图(Java)

本专题主线:三题(98 / 230 / 199)共用两把钥匙——BST 的中序序列严格递增,以及遍历中的"层"与"深度"标记。看懂这两点,三题共用一套模板。 结构约定:每题统一分三部分——①题目分析与解题思路(含易错点辨析);②常见解法(附代码)及讲解;③知识点总结。

2401_88612756的博客 717
上一篇: Leetcode2528. 最大化城市的最小电量
下一篇: Leetcode2855. 使数组成为递增数组的最少右移次数
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、付费专栏及课程。

余额充值