【算法挨揍日记】day16——525. 连续数组、1314. 矩阵区域和

news2025/3/15 0:05:55

 525. 连续数组

525. 连续数组

 题目描述:

给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。

解题思路:

本题的元素只有0和1,根据题目意思,我们可以把题目看成找一段最长的子区间使得区间的0

和1的数量相同,我们可以对其优化将所有的0变成-1,这样这段区间的和就为0

也就是转化为在【0,i-1】这个区间内最长的和为0的子数组

我们依旧可以利用哈希表hash,我们还得处理一下默认前缀和为0的时候等于-1的时候 

长度的计算:

解题思路: 

class Solution {
public:
    int findMaxLength(vector<int>& nums) {
        unordered_map<int,int>hash;
        hash[0]=-1;
        int ret=0,sum=0;
        for(int i=0;i<nums.size();i++)
        {
            sum+=nums[i]==0?-1:1;
            if(hash.count(sum))ret=max(ret,i-hash[sum]);
            else hash[sum]=i;
        }
        return ret;
    }
};

 1314. 矩阵区域和

1314. 矩阵区域和

题目描述:

给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: 

  • i - k <= r <= i + k,
  • j - k <= c <= j + k 且
  • (r, c) 在矩阵内。

 

解题思路: 

本题我们还是使用前缀和+哈希表,不过是二维前缀和

 因为本题的计算的下标的范围可能会越界,因此我们可以min和max函数就行解决,这里的+1是因为需要进行下标匹配,下标匹配下面会讲;

 有个细节需要注意就是:

我们的mat数组是从0开始的,而我们的前缀和数组dp是从1开始,而我们返回的数组ans是从0开始的

因为力扣进行结果判断的时候需要从0开始,不然本题更加简单

解题代码: 

class Solution {
public:
    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
        int n=mat.size();
        int m=mat[0].size();
        vector<vector<int>> dp(n+1,vector<int>(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]-dp[i-1][j-1]+mat[i-1][j-1];
        vector<vector<int>> ans(n,vector<int>(m));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                int x1=max(0,i-k)+1;
                int y1=max(0,j-k)+1;
                int x2=min(n-1,i+k)+1;
                int y2=min(m-1,j+k)+1;
                ans[i][j]=dp[x2][y2]-dp[x2][y1-1]-dp[x1-1][y2]+dp[x1-1][y1-1];
            }
        }
        return ans;
    }
};

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

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

相关文章

Educational Codeforces Round 156 (Rated for Div. 2)

C. Decreasing String 分析&#xff1a;暴力做法是很容易想到的&#xff0c;但时间复杂度为O(n2) 这是我打cf以来看到的最好的题解。 #include<cstdio> #include<set> #include<list> #include<queue> #include<math.h> #include<stdlib.h&g…

5.DApp-前端网页怎么连接MetaMask

题记 在前端网页连接metamask&#xff0c;以下是全部操作流程和代码。 编写index.html文件 index.html文件如下&#xff1a; <!DOCTYPE html> <html> <head> <title>My DApp</title> <!--导入用于检测Metamask提供者的JavaScript库--> &l…

嵌入式开发学习之STM32F407定时器中断配置(四)

嵌入式开发学习之STM32F407定时器中断配置&#xff08;四&#xff09; 此次实现目的开发涉及工具一、TIM参数配置和中断配置二、TIM的中断服务函数 此次实现目的 1.配置一个TIM进行计时&#xff0c;让一颗LED以点亮500ms&#xff0c;熄灭500ms的方式闪烁&#xff1b; 有工程实…

【JVM】对象内存布局

对象内存布局 文章目录 对象内存布局1. 对象的内存布局2. 对象标记(Mark Word)3. 类元信息(类型指针)4. 实例数据和对象填充 1. 对象的内存布局 在Hotspot虚拟机里&#xff0c;对象在堆内存中的存储布局可以划分为三个部分&#xff1a;对象头(Header)、实例数据(Instance Data…

华为云云耀云服务器L实例评测|使用Benchmark工具对云耀云服务器Elasticsearch的性能测试

目录 引言 1 在centos上安装Elasticsearch 1.1在服务器上安装 Docker 1.2 查找Elasticsearch镜像 1.3 安装并运行 Elasticsearch 容器 2 性能测试 Elasticsearch 2.1 安装 Apache Benchmark 工具 2.2 使用Benchmark进行性能测试 3 性能分析 3.1 性能测试结果 3.2 性能…

堆/二叉堆详解[C/C++]

前言 堆是计算机科学中-类特殊的数据结构的统称。实现有很多,例如:大顶堆,小顶堆&#xff0c;斐波那契堆&#xff0c;左偏堆&#xff0c;斜堆等等。从子结点个数上可以分为二汊堆&#xff0c;N叉堆等等。本文将介绍的是二叉堆。 二叉堆的概念 1、引例 我们小时候&#xff0c;基…

网络安全常见问题隐患及其应对措施

随着数字化时代的到来&#xff0c;网络安全已经成为组织和个人面临的严重挑战之一。网络攻击日益普及&#xff0c;黑客和不法分子不断寻找机会侵入系统、窃取敏感信息、破坏服务和网络基础设施。在这种情况下&#xff0c;了解网络安全的常见问题隐患以及如何应对它们至关重要。…

Android 13 - Media框架(11)- MediaCodec(一)

MediaCodec 是 Android 平台上音视频编解码的标准接口&#xff0c;无论是使用软解还是硬解都要通过调用 MediaCodec来完成&#xff0c;是学习 Android 音视频不可跳过的重要部分。MediaCodec 部分的代码有几千行&#xff0c;光是头文件就有几百行&#xff0c;对于我这样的新手来…

OpenCV Series : TI - DSP - CCS

Code Composer Studio V5.5 https://www.ti.com/tool/download/CCSTUDIO https://www.ti.com/tool/download/CCSTUDIO/5.5.0.00077

vue中引入jquery解决跨域问题

1、vue 工程文件 package.json 中 引入 “dependencies”: { “jquery”:“^2.2.4” }, 2、控制台执行命令&#xff0c;当前工程文件夹下 cnpm install 3、修改的vue文件中 加入 import $ from ‘jquery’ 4、调用 ajax请求 $.ajax({url:http://192.168.0.10:9099/strutsJspA…

黑马JVM总结(三十六)

&#xff08;1&#xff09;CAS-概述 cas是配合volatile使用的技术 &#xff0c;对共享变量的安全性要使用synachonized加锁&#xff0c;但是CAS不加锁&#xff0c;它是使用where&#xff08;true&#xff09;的死循环&#xff0c;里面compareAndSwap尝试把结果赋值给共享变量&…

Leetcode 02.07 链表相交(链表)

Leetcode 02.07 链表相交&#xff08;链表&#xff09; 解法1 尾部对齐解法2&#xff1a;太厉害了&#xff0c;数学归纳推导的方法 很巧妙&#xff0c;这就是将链表的尾端对齐后再一起遍历&#xff0c;这样能满足题目的要求。因为相交之后两个链表到结束的所有节点都一样了&…

nginx正向代理、反向代理、负载均衡(重中之重)

nginx中有两种代理方式&#xff1a; 七层代理&#xff08;http协议&#xff09; 四层代理&#xff08;基于tcp或udp的流量转发&#xff09; 一、七层代理 原理&#xff1a;客户端请求代理服务器&#xff0c;由代理服务器转发客户端的http请求&#xff0c;转发到内部的服务器…

手写一个PrattParser基本运算解析器2: PrattParser概述

点击查看 基于Swift的PrattParser项目 解析器概述 由于编译原理内容太过于枯燥, 所以当时我就在想能不能写一个编译过程, 这时候就在B站上看到了熊爷的技术去魅篇 - PrattParser解析器. 解析器主要的工作是把一系列的标记转换为树的表示形式. 例如线性代码 a 1 1 * 3 的转换…

React 路由学习总结 react-router-dom6+react-router-dom5

开题 单页面应用和多页面应用 SPA&#xff1a;单页面应用程序&#xff0c;整个应用中只有一个页面(index.html) MPA&#xff1a;多页面应用程序&#xff0c;整个应用中有很多页面(*.html) react路由 现在的前端应用大多都是SPA单页面应用程序&#xff0c;也就是一个HTML页面的…

Compose Material3 新增垂直分隔符(VerticalDivider)解析与疑惑

前言 谷歌在 7 月 28 日发布了 Compose Material3 1.2.0-alpha04 版本&#xff0c;在该版本新增&#xff08;修改&#xff09;了两个组件&#xff0c;垂直分隔符和分段按钮&#xff1a; Experimental Segmented Button API. Dividers now have a parameter to control orienta…

TwinCAT3 ADS与C++通讯

文章目录 一 ADS简介1.1 ADS通讯定义1.2 ADS通讯实现 二 上位机程序编写&#xff08;Visual Studio 2019&#xff09;2.1 启动VS2019,新建MFC项目2.2 添加ADS通讯链接库2.3 在程序中引入头文件 一 ADS简介 1.1 ADS通讯定义 ADS&#xff08;Advanced Design System&#xff09…

从0开始编写BP,自适应学习率的BP神经网络,不使用MATLAB工具箱,纯手写matlab代码,以BP分类为例...

与上篇文章不同&#xff0c;仔细读了上篇文章的小伙伴应该知道&#xff0c;BP神经网络是有一个学习率的&#xff0c;而这个学习率很大程度上决定着神经网络的效果。这里采用自适应学习率&#xff0c;实现纯手写BP神经网络。 编程时&#xff0c;激活函数选择Sigmoid函数&#xf…

【计算机毕设选题推荐】网络在线考试系统SpringBoot+SSM+Vue

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 网络在线考试系统 技术栈 SpringBootSSMVueMySQLMaven 文章目录 一、网络在线考试系统-环境…

SLAM从入门到精通(dwa算法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 要说搜路算法&#xff0c;这个大家都比较好理解。毕竟从一个地点走到另外一个地点&#xff0c;这个都是直觉上可以感受到的事情。但是这条道路上机…