Leetcode刷题笔记13

DP35 【模板】二维前缀和

【模板】二维前缀和_牛客题霸_牛客网

解法一:暴力解法 -> 模拟

直接算区间里面的和

每次询问都要遍历数组一遍

时间复杂度:O(n*m*q)

解法二:前缀和

1. 预处理出来一个前缀和矩阵
dp[i][j]表示:从[1,1]位置到[i,j]位置,这段区间里面所有元素的和
dp[i][j] = A + B + C + D = (A + B) + (A + C) + D - A

A + B = dp[i-1][j]
A + C = dp[i][j-1]
D = arr[i][j]
A = dp[i-1][j-1]
直接遍历dp一遍就能全部得出来

2. 使用前缀和矩阵

求的是[x1,y1] ~ [x2,y2]

先算出整个区域的面积,再减去
D = A + B + C + D - (A+B) - (A+C) + A 

A + B + C + D = dp[x2][y2]

A + B = dp[x1-1][y2]

A + C = dp[x2][y1-1]

A = dp[x1-1][y1-1]

A区域

B,C

使用


时间复杂度:O(m*n) + O(q)

代码:C++

#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    // 1. 读入数据
    int n = 0, m = 0, q = 0;
    cin >> n >> m >> q;

    // 因为下标是从1开始计数的,所以m和n要+1才能访问到[m][n]这个位置
    vector<vector<int>> arr(n+1, vector<int>(m+1));

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<= m; j++)
        {
            cin >> arr[i][j];
        }
    }

    // 2. 预处理前缀和矩阵,longlong防止溢出
    vector<vector<long long>> dp(n+1, vector<long long>(m+1));

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<= m; j++)
        {
            dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1];
        }
    }

    // 3. 使用前缀和矩阵,一共q次,所以q--
    int x1=0, y1=0, x2=0, y2=0;
    while(q--)
    {
        cin >> x1 >> y1 >> x2 >> y2;
        cout << dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1] << endl;

    }

    return 0;
}

13. 罗马数字转整数

13. 罗马数字转整数 - 力扣(LeetCode)

可以直接创建一个罗马数字的映射表然后判断情况。如果当前字符不是最后一个字符并且当前字符的数值小于下一个字符的数值,就减去当前字符,可以参考IV = 4

代码:C++

class Solution {
public:
    int romanToInt(string s) 
    {
        // 建立罗马数字到整数的映射
        unordered_map<char, int> roman_map = {
            {'I', 1},
            {'V', 5},
            {'X', 10},
            {'L', 50},
            {'C', 100},
            {'D', 500},
            {'M', 1000}
        };

        int result = 0;
        int n = s.size();

        for(int i=0; i<n; i++)
        {
            // 如果当前字符不是最后一个字符,并且当前字符表示的数值小于下一个字符表示的数值
            if(i < n-1 && roman_map[s[i]] < roman_map[s[i+1]])
            {
                // 减去当前字符表示的数值
                result -= roman_map[s[i]];
            }
            else
            {
                result += roman_map[s[i]];
            }
        }
        return result;
    }
};

28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

解法一:KMP算法 

构建部分匹配表并记录needle中每个位置的最长相同前缀后缀的长度。

然后匹配haystack和needle,如果不匹配可以根据部分匹配表数组直接跳到可能的匹配位置,而不必从头重新匹配。

解法二:暴力匹配

代码:C++

class Solution {
public:
    int strStr(string haystack, string needle) 
    {
        int n = haystack.size(), m = needle.size();
        // 外循环遍历 haystack 的每一个可能的起始位置 i(范围为 0 到 n - m)。
        for(int i=0; i+m <= n; i++)
        {
            bool flag = true;
            // 内循环遍历 needle 的每一个字符,检查 haystack 从 i 位置开始的子串是否与 needle 匹配。
            for(int j=0; j<m; j++)
            {
                if(haystack[i+j]!=needle[j])
                {
                    flag = false;
                    break;
                }
            }
            // 如果发现匹配子串,返回其起始位置 i
            if(flag)
            {
                return i;
            }
        }
        return -1;
    }
};

66. 加一 

66. 加一 - 力扣(LeetCode)

  • 从数组的末尾开始处理

    • 从最低位(数组最后一位)开始向前遍历。
    • 如果当前位的数字小于 9,则加 1,并直接返回结果,因为加 1 不会产生进位。
    • 如果当前位的数字是 9,将其置为 0,然后继续向前处理,因为需要向更高位进 1。
  • 处理进位

    • 如果数组中的所有元素都是 9,则遍历结束后,所有位都将变成 0。
    • 这种情况下,需要在数组的开头插入一个 1,表示最高位的进位。

代码:C++

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int n = digits.size(); // 获取数组的长度
        
        // 从数组的最后一个元素开始遍历
        for (int i = n - 1; i >= 0; --i) {
            if (digits[i] < 9) { // 如果当前元素小于9
                digits[i] += 1; // 将当前元素加一
                return digits; // 直接返回结果
            }
            digits[i] = 0; // 如果当前元素等于9,将其置为0
        }
        
        // 如果所有元素都是9,则在数组的开头插入1
        digits.insert(digits.begin(), 1);
        return digits; // 返回结果
    }
};

 

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

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

相关文章

VisionPro Basic - 01- 有关应用和作业

前言&#xff1a; VP&#xff08;VisionPro&#xff09;的保存文件都是.vpp&#xff0c;所以&#xff0c;你在保存的时候&#xff0c;一定要注意区别。否则&#xff0c;过了几天&#xff0c;你都搞不清楚自己当年哪个的应用&#xff0c;哪个是作业... 环境&#xff1a; 例子1&…

高级网络互联技术:AS3001与AS3000的路由交换方案

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

数字化转型项目实施方案建议书|168页PPT

文 档是一份关于数字化转型项目的实施方案建议书&#xff0c;由某咨询公司为***集团制定。文档详细介绍了项目的实施范围、信息系统现状、建设目标、高阶方案建议以及项目组织和计划。 以下是对文档内容的解读&#xff1a; 项目实施范围&#xff1a;涵盖了数字化转型路线图中…

CSP-J2024 全网首发

T1:扑克牌 题目描述 Description 小 P 从同学小 Q 那儿借来一副 n 张牌的扑克牌。 本题中我们不考虑大小王&#xff0c;此时每张牌具有两个属性:花色和点数。花色共有 4种: 方片、草花、红桃和黑桃。点数共有 13 种&#xff0c;从小到大分别为A 2 3 4 5 6 7 8 9 T J Q K。注意…

【3DMAX科研绘图】3DMAX饼状图生成插件PieChart使用方法详解

3DMAX饼状图生成插件PieChart&#xff0c;一款用于制作3D饼状图的工具。可以设置任意数量的切片&#xff0c;以及随机或指定切片颜色。 饼状图&#xff08;Pie Chart&#xff09;是一种常用的数据可视化工具&#xff0c;它主要用于展示不同类别数据的比例关系。在饼状图中&…

ERPS环网配置

ERPS&#xff08;Ethernet Ring Protection Switching&#xff09;&#xff1a;以太网多环保护技术 ERPS节点信息 1、RPL owner 节点&#xff08;主节点&#xff09; 一个 ERPS 环只有一个 RPL owner 节点&#xff0c;由用户配置决定&#xff0c;通过阻塞 RPL 端口来防止 ERP…

.NET 一款内网渗透中替代PowerShell的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

笔记整理—linux驱动开发部分(1)驱动梗概

驱动可以分为广义上的和狭义上的驱动。广义上的驱动是用于操作硬件的代码&#xff0c;而狭义上的驱动为基于内核系统之上让硬件去被操作的逻辑方法。 linux体系架构&#xff1a; 1.分层思想 &#xff1a;在OS中间还会有许多层。 : 2.驱动的上面是系统调用&#xff08;API&…

Springboot 整合 Java DL4J 实现智能客服

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

大语言模型的Scaling Law【Power Low】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 文章目录 NLP-大语言模型学习系列目录一、什么是…

隧道煤矿甬道的可视化大屏,关键时刻起关键作用

隧道、煤矿甬道的可视化大屏在关键时刻确实能发挥关键作用。它可以实时显示内部的环境参数&#xff0c;如温度、湿度、瓦斯浓度等&#xff0c;帮助工作人员及时掌握潜在危险情况。 同时&#xff0c;大屏能展示人员分布和设备运行状态&#xff0c;便于高效调度和管理。 在紧急…

计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议

文章目录 IPv4地址与MAC地址的封装位置IPv4地址与MAC地址的关系地址解析协议ARP工作原理ARP高速缓存表 IPv4地址与MAC地址的封装位置 在数据传输过程中&#xff0c;每一层都会添加自己的头部信息&#xff0c;最终形成完整的数据包。具体来说&#xff1a; 应用层生成的应用程序…

技术成神之路:设计模式(二十一)外观模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口&#xff0c;使得子系统更容易使用。 …

qt QGraphicsGridLayout详解

一、概述 QGraphicsGridLayout是Qt框架中用于在QGraphicsScene中布置图形项的一个布局管理器。它类似于QWidget中的QGridLayout&#xff0c;但主要处理的是QGraphicsItem和QGraphicsWidget等图形项。通过合理设置网格位置、伸缩因子和尺寸&#xff0c;可以实现复杂而灵活的布局…

【论文笔记】MLSLT: Towards Multilingual Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: MLSLT: Towards Multiling…

2024-网鼎杯第二次模拟练习-web02

进入做题页面&#xff0c;经过信息搜集和目录扫描&#xff0c;发现只有一个公告是可以利用的 http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/OA_announcement.php?id1 这个后面有一个明显的注入点&#xff0c;经过多次刷新和快速刷新后发现&…

使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理方便内网网站访问)【使用frp搭建内网穿透】

FRP&#xff08;Fast Reverse Proxy&#xff09;是一个高性能的反向代理应用程序&#xff0c;主要用于内网穿透。它允许用户将内部网络服务暴露到外部网络&#xff0c;适用于 NAT 或防火墙环境下的服务访问。 他是一个开源的 服务 如果大家不想用 花生壳 软件&#xff0c;可以尝…

基于信号分解和多种深度学习结合的上证指数预测模型

大家好&#xff0c;我是带我去滑雪&#xff01; 为了给投资者提供更准确的投资建议、帮助政府和监管部门更好地制定相关政策&#xff0c;维护市场稳定&#xff0c;本文对股民情绪和上证指数之间的关系进行更深入的研究&#xff0c;并结合信号分解、优化算法和深度学习对上证指数…

探索孤独症儿童治愈的希望之路

孤独症&#xff0c;作为一种严重影响儿童发展的神经发育障碍性疾病&#xff0c;给无数家庭带来了难以承受的沉重负担。然而&#xff0c;人们始终未曾放弃对孤独症儿童治愈可能性的不懈探索。 早期干预乃是关键所在。一旦儿童被诊断为孤独症&#xff0c;就应迅速启动全面且系统的…

分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)

分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB) 目录 分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)分类效果基本介绍程序设计参考资料分类效果 基本介绍 GCN图卷积神经网络多特征分类预测(MATLAB) 在图卷积神经网络(GCN)中,多特征分类