labuladong日常刷题-前缀和数组 | LeetCode 303区域和检索-数组不可变 304二维区域和检索-矩阵不可变 | 差分数组 1094拼车

前缀和数组—动态规划的一种

LeetCode 303 区域和检索-数组不可变 2023.12.30

  • 题目链接
  • labuladong讲解[链接]
    在这里插入图片描述
class NumArray {
public:
    NumArray(vector<int>& nums) {
        //num = nums; //暴力求解
        //简单动态规划
        dp.resize(nums.size());
        dp[0] = nums[0];
        for(int i = 1; i < nums.size(); i++)
            dp[i] = dp[i-1] + nums[i];
    }
    
    int sumRange(int left, int right) {
        //暴力求解
        // int sum = 0;
        // while(left <= right)
        // {
        //     sum += num[left];
        //     left++;
        // }
        // return sum;
        //简单动态规划
        //因为dp[i]表示nums[0]+xxx+nums[i],所以需要区分left是否为0
        if(left == 0)
            return dp[right];
        return dp[right] - dp[left-1];

    }
    //vector<int> num; //暴力求解
    vector<int> dp;
};

LeetCode 304 二维区域和检索-矩阵不可变 2023.12.31

  • 题目链接
  • labuladong讲解[链接]
    在这里插入图片描述
class NumMatrix {
public:
    NumMatrix(vector<vector<int>>& matrix) {
        //暴力求解超时
        // matrix_value = matrix;
        
        //简直就是动态规划,我写的很low,看题解吧
        dp.resize(matrix.size());
        int num = 0;
        for(int i = 0; i < matrix.size(); i++)
        {
            dp[i].resize(matrix[0].size());
            dp[i][0] = num + matrix[i][0];
            num = dp[i][0];
        }
        num = 0;
        for(int j = 0; j < matrix[0].size(); j++)
        {
            dp[0][j] = num + matrix[0][j];
            num = dp[0][j];
        }
        for(int i = 1; i < matrix.size(); i++)
        {
            for(int j = 1; j < matrix[0].size(); j++)
            {
                dp[i][j] = dp[i][j-1] + dp[i-1][j] + matrix[i][j] - dp[i-1][j-1];
            }
        }
    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
        /*暴力求解超时
        int sum = 0;
        int curcol = col1;
        while(row1 <= row2)
        {
            while(curcol <= col2)
            {
                sum += matrix_value[row1][curcol];
                curcol++;
            }
            curcol = col1;
            row1++;
        }
        return sum; */
        // cout << dp[0][2] << endl << dp[0][1] << endl;
        if(row1 == 0 && col1 == 0)
            return dp[row2][col2];
        else if(row1 == 0 && col1 != 0)
            return dp[row2][col2] - dp[row2][col1-1];
        else if(row1 != 0 && col1 == 0)
            return dp[row2][col2] - dp[row1-1][col2];
        return dp[row2][col2] - dp[row1-1][col2] - dp[row2][col1-1] + dp[row1-1][col1-1];
    }
    //暴力求解超时
    // vector<vector<int>> matrix_value;
    vector<vector<int>> dp;
};

/**
 * Your NumMatrix object will be instantiated and called as such:
 * NumMatrix* obj = new NumMatrix(matrix);
 * int param_1 = obj->sumRegion(row1,col1,row2,col2);
 */

差分数组–前缀和数组的升级

LeetCode 1094 拼车 2023.12.31

  • 题目链接
  • labuladong讲解[链接]
    在这里插入图片描述
class Solution {
public:
    bool carPooling(vector<vector<int>>& trips, int capacity) {
        //差分数组,第一次见,对着答案写的
        //num[i]表示到达每个车站时车上的人数,默认每一站车上人数为0
        vector<int> nums(1001, 0);
        //构造差分解法
        Difference df(nums);
        
        //遍历每一次trip
        for(const auto& trip : trips)
        {
            //乘客数量
            int val = trip[0];
            //乘客上站的位置,从该站开始车上人数增多
            int i = trip[1];
            //乘客下站的位置,从该站开始车上人数减少
            int j = trip[2]-1;
            //那么人数增多的区间是[trip[0], trip[j]-1]
            df.increment(i, j, val);
        }
        //到此就更新完了diff数组

        //更新nums数组
        vector<int> res = df.result();

        //判断车辆在每个站的人数是否超过capacity
        for(int i = 0; i < res.size(); i++)
            if(capacity < res[i])
                return false;
        return true;
    }

    //差分数组工具类
    class Difference
    {
        //差分数组
        vector<int> diff;
        //输入一个初始数组,区间操作将在这个数组上进行
    public:
        Difference(vector<int>& nums)
        {
            //构造差分数组df
            diff.resize(nums.size());
            diff[0] = nums[0];
            for(int i = 1; i < nums.size(); i++)
                diff[i] = nums[i] - nums[i-1];
        }

        //给nums数组中[i, j]区间增加val值,其可正可负
        void increment(int i, int j,  int val)
        {
            //从nums[i]开始增加val
            diff[i] += val;
            //从nums[j+1]开始恢复正常,不变
            if(j+1 < diff.size())
                diff[j+1] -= val;
        }

        //返回变动后的nums数组
        vector<int> result()
        {
            vector<int> res(diff.size());
            //根据diff数组更新nums新数组的值
            res[0] = diff[0];
            for(int i = 1; i < diff.size(); i++)
                res[i] = res[i-1] + diff[i];
            //返回nums新数组
            return res;
        }
    };
};


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0082:地震灾害图件制作之DEM晕渲图(山体阴影效果)

以甘肃积石山县6.2级地震为例,基于震中100km范围内的DEM数据,制作数字高程模型山体阴影晕渲图。 文章目录 一、效果展示二、实验数据三、晕渲图制作一、效果展示 基于数字高程模型制作的山体阴影晕渲图如下所示: 二、实验数据 本试验所需要的数据包括: 1. 震中位置矢量数…

【MATLAB】PSO粒子群优化LSTM(PSO_LSTM)的时间序列预测

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 PSO粒子群优化LSTM&#xff08;PSO-LSTM&#xff09;是一种将粒子群优化算法&#xff08;PSO&#xff09;与长短期记忆神经网络&#xff08;LSTM&#xff09;相结合的混合模型。该算法通过…

一个项目,用十款数据库?

大家好&#xff0c;我是豆小匠。 关于数据库&#xff0c;大学的时候只知道MySQL&#xff0c;学习深入点也就是用到了Redis、MongoDB等非关系型数据库。 然而&#xff0c;工作中用到的数据库实在太多&#xff0c;每种数据库都有自身的优势和局限性。所以在这里梳理下日常常用数…

(2023,提示扩展,图像反演,文本到文本生成)自适应文本到图像生成的提示扩展

Prompt Expansion for Adaptive Text-to-Image Generation 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. 提示扩展数据集 3.1 图像审美数据集 3.2 图像到文本反演 3.3 查…

MYSQL存储过程和存储函数-数据库实验五

Mysql数据库实验及练习题相关 MySQL 数据库和表的管理-数据库实验一 MySQL连接查询、索引、视图-数据库实验二、实验三 MySQL约束、触发器-数据库实验四 MYSQL存储过程和存储函数-数据库实验五 MySQL批量随机生成name、TEL、idNumber MYSQL数据库的安全管理-数据库实验六 MYSQ…

Python入门学习篇(十)——函数定义函数传参方式

1 相关定义和概念 1.1 函数的理解 一段被封装的可以重复调用的代码。 1.2 函数定义语法结构 def 函数名(形参1,形参2):要封装的逻辑代码 # 注意:函数可以有返回值也可以没有返回值,没有返回值的结果是None1.3 函数调用的语法结构 函数名(形参1,形参2)1.4 简单实例 1.4.1 …

【Spring】spring的容器创建

目录 控制反转IOC 依赖注入DI 创建spring的容器方式&#xff1a; 思考&#xff1a; spring整合Junit4 控制反转IOC 把对象的创建和对象之间的调用过程&#xff0c;交给Spring管理&#xff0c;IOC是容器&#xff0c;是思想。&#xff01;&#xff01;&#xff01; 依赖注入…

【每日一题】【12.29】 - 【12.31】年终收尾

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 这三天的题目难度相对较小&#xff0c;基本都为模拟题&#xff0c;但是第二三的题目年份贡献类型很有代表性。2023年最后三天年终收…

【数据结构与算法】第2章线性表-选择题、判断题、填空题(头歌习题)【合集】

第1关&#xff1a;选择题、填空题、判断题 任务描述 本关任务&#xff1a;学习完线性表后&#xff0c;应掌握线性表相关的基础知识。 线性表知识点归纳 (1)线性表是由n(n≥0)个数据元素组成的有限序列&#xff0c;所有元素的性质相同&#xff0c;元素之间呈现线性关系&…

深度学习 | 编码器-解码器网络、seq2seq模型、束搜索算法

我们知道传统RNN输入和输出数据是等长的&#xff0c;这显然极大限制了他的应用范围。 前面几节我们讲到的循环神经网络的各种变体基本上都在解决一个序列的问题。还有一大类问题涉及到的是两个序列间转换。它是自然语言处理中的一个重要领域&#xff0c;包括机器翻译、语音识别…

Resolume Arena(VJ音视频软件):创意无限,视听艺术的新境界

Resolume Arena是一款领先的VJ音视频软件&#xff0c;为创意人士提供了丰富的视觉效果和音频处理功能。无论是在舞台演出、音乐会还是派对活动中&#xff0c;Resolume Arena能够将音乐、视频和图像无缝地结合&#xff0c;创造出引人入胜的视听体验。 Resolume Arena具备强大的…

Servlet中常用的三大API

HttpServlet 我们写 Servlet 代码的时候&#xff0c;首先第一步就是先创建类&#xff0c;继承自 HttpServlet&#xff0c;并重写其中的某些方法。我们实际开发的时候主要重写 doXXX 方法&#xff0c;很少会重写 init / destory / service。 因为这一些方法的调用时机&#xf…

openmediavault(OMV) (24)在线网盘(2)kodcloud

简介 KodBox是可道云推出的企业级私有云存储解决方案,旨在为中小企业提供安全可控、可靠易用的一站式在线文件存储管理与协同办公平台。具体详细信息可以查看官网http://kodcloud.com/ 安装部署 kodcloud支持在多种平台进行部署,这里我使用docker镜像进行部署 hub.docker.…

Vscode —— 解决Vscode终端无法使用npm的命令的问题

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错 解决办法&#x1f447; 方法一&#xff1a;【右键单击Vscode】以【管理员身份运行】&#xff0c;【重启Vscode】 方法二&#xff1a;①【用户变量】的【path】添加npm所在路径的…

Tips:VS2022提示MSB8040 此项目需要缓解了 Spectre 漏洞的库解决方法。

1&#xff0c;打开Visual Studio Installer 2、点击【修改】 3、选中【单个组件】&#xff0c;输入Spectre&#xff0c;下拉到【编译 工具和运行时】进行选择&#xff08;尽量寻找最新版本&#xff09;&#xff0c;然后点击【修改】进行安装&#xff08;如果VS2022没有关闭&…

劫持 PE 文件:新建节表并插入指定 DLL 文件

PE格式简介 PE(Portable Executable)格式&#xff0c;是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。 Portable 是指对于不同的Windows版本和不同的CPU类型上…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baumer工业相机通过NEOAPI…

Radar System Pro - Plug Play Solution

Radar System Pro是一款功能多样且可定制的资源,旨在通过功能齐全且易于使用的雷达系统增强您的Unity项目。无论您是在开发第一人称射击游戏、策略游戏还是太空探索模拟器,我们的雷达系统都将为您提供所需的工具,以创建引人入胜且身临其境的体验。 雷达系统是一个模块化资产…

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前文链接&#xff1a; ​​开源可观测性平台Signoz系列&#xff08;一&#xff09;【开篇】​​ ​​开源可观测性平台Signoz&…

40道MyBatis面试题带答案(很全)

1. 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接…