代码随想录算法训练营第二天 |209.长度最小子数组; 59.螺旋矩阵|| ; 前缀和
今日任务
209.长度最小子数组; 59.螺旋矩阵|| 58.区间和 44.开发商购买土地
209.长度最小的子数组
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili
//连续: 滑动窗口public static int minSubArrayLen(int target, int[] nums) {if(nums == null || nums.length == 0){return 0;}int l=0,r=0;int minLen = Integer.MAX_VALUE;//计算前缀和int[] sumArr = new int[nums.length+1];sumArr[0] = nums[0];for(int i=1;i< nums.length;i++){sumArr[i] = nums[i] + sumArr[i-1];}//计算累加值最小while(l<=r && r <= nums.length-1){//当前滑动窗口内的和int curSum = l == 0 ? sumArr[r] : sumArr[r] - sumArr[l-1];//不满足条件,则窗口右端右移扩大范围if(curSum < target){r++;continue;}//满足条件,则窗口左端右移尝试缩小范围if(curSum >= target){minLen = Math.min(r-l+1,minLen);l++;continue;}}return minLen == Integer.MAX_VALUE ? 0:minLen;} 核心点:
看到连续和的时候,优先想到的就是滑动窗口与前缀和,滑动窗口的题型,关键点需要理解什么情况下需要扩大/缩小窗口范围
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
class Solution {public int[][] generateMatrix(int n) {int[][] res = new int[n][n];//共几圈int totalRound = n%2 + n/2;dfs(res,1,totalRound,1,n);return res;}/*** 如图二维数组对应的坐标为(x,y)* +-----------------> x* | (0,0) (0,1) (0,2)* | (1,0) (1,1) (1,2)* ↓ (2,0) (2,1) (2,2)* y* @param res* @param start 起始值* @param width 正方形边长,初始为n,每缩小一圈边长减2* @param round 第几圈: 最外圈认为是第一圈*/public static void dfs(int[][] res,int round,int totalRound,int start,int width){if(round > totalRound){return;}int x = round-1;int y = round-1;int idxEnd = round+width-2;边长为1时,则需要设置中心值if(width == 1){res[x][y] = start;return;}//顶for (;y < idxEnd; y++) {res[round-1][y] = start++;}//右for (;x < idxEnd; x++) {res[x][idxEnd] = start++;}//底for (;y > round-1; y--) {res[idxEnd][y] = start++;}//左for (; x > round-1; x--) {res[x][y] = start++;}//width 边长每次都减2 --> 左边减一右边减一dfs(res,round+1,totalRound,start,width-2);}
} 核心点
解题的关键在于几个关键点:
- 明确循环不变量原则或者是找到循环体
- 理解每层正方形的变成差值为2
- 拆分成 顶边(x不变y递增),右边(y不变x递增),底边(x不变y递减),左边(y不变x递减)
- 按着上面的原则将多层正方形的填空题比变成了单层正方形的填空题
58.区间和
前缀和是一种思维巧妙很实用 而且 很有容易理解的一种算法思想,大家可以体会一下
文章讲解:58. 区间和 | 代码随想录
题目描述
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。
输入描述
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。
输出描述
输出每个指定区间内元素的总和。
输入示例
5
1
2
3
4
5
0 1
1 3 输出示例
3
9 提示信息
数据范围:
0 < n <= 100000
import java.util.Scanner;public class Main {public static void main (String[] args) {Scanner sc = new Scanner(System.in);//arr长度 lenint len = sc.nextInt();int[] arr = new int[len];//补充数组元素for(int i=0;i<len;i++){arr[i] = sc.nextInt();}int[] sum = new int[len];sum[0] = arr[0];//计算前缀和for(int i=1;i<len;i++){sum[i] = sum[i-1]+arr[i];}//输入范围int left,right;while(sc.hasNextInt()){left = sc.nextInt();right = sc.nextInt();int res = (left == 0) ? sum[right] : sum[right]- sum[left-1];System.out.println(res);}}
}
补充(Java ACM输入输出):
常用类
import java.util.Scanner; 常用API
//构造方法
//从文件中读取数据
//Scanner sc = new Scanner(File source);
//从输入流中读取数据
//Scanner sc = new Scanner(InputStream source);
//从字符串中读取数据
//Scanner sc = new Scanner(String source);
//直接接受系统控制台的输入
Scanner sc = new Scanner(System.in);//数据读取
//读取字符串,遇到空格或换行符停止
sc.next();
//读取整数
sc.nextInt();
//读取双精度浮点数
sc.nextDouble();
//读取一行字符串,包括换行符
sc.nextLine();//数据判断
//判断是否有下一个字符串
sc.hasNext();
//判断是否有下一个整数
sc.hasNextInt();
//判断是否有下一个双精度浮点数
sc.hasNextDouble();
//方法来判断是否还有下一行输入
sc.hasNextLine(); 44.开发商购买土地
44. 开发商购买土地 | 代码随想录
【题目描述】
在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。
现在,需要将这个城市区域的所有区块分配给 A 公司和 B 公司。
然而,由于城市规划的限制,只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块。
为了确保公平竞争,你需要找到一种分配方式,使得 A 公司和 B 公司各自的子区域内的土地总价值之差最小。
注意:区块不可再分。
【输入描述】
第一行输入两个正整数,代表 n 和 m。
接下来的 n 行,每行输出 m 个正整数。
输出描述
请输出一个整数,代表两个子区域内土地总价值之间的最小差距。
【输入示例】
3 3 1 2 3 2 1 3 1 2 3
【输出示例】
0
【提示信息】
如果将区域按照如下方式划分:
1 2 | 3 2 1 | 3 1 2 | 3
两个子区域内土地总价值之间的最小差距可以达到 0。
【数据范围】:
- 1 <= n, m <= 100;
- n 和 m 不同时为 1。
import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);//System.out.println("输入n");int n = sc.nextInt();//System.out.println("输入m");int m = sc.nextInt();int[][] arr = new int[n][m];for (int i = 0; i < n; i++) {//System.out.println("输入第"+(i+1)+"行");for (int j = 0; j < m; j++) {arr[i][j] = sc.nextInt();}}//二维数组所有元素和int total = 0;//计算前缀和int[][] sum = new int[n][m];for (int i = 0; i < n; i++) {sum[i][0] = arr[i][0];total += m == 1 ? sum[i][0]:0; }for (int i = 0; i < n; i++) {for (int j = 1; j < m; j++) {sum[i][j] = sum[i][j-1] + arr[i][j];total += ((j == (m-1)) ? sum[i][j] : 0);}}//计算最终输出结果int min = Integer.MAX_VALUE;//按y轴切割for (int i = 0; i < n-1; i++){int top = sumY(sum,i,m);int down = total-top;min = Math.min(min,Math.abs(top-down));}//按x轴切割for (int i = 0; i < m-1; i++){int left = sumX(sum,i,n);int right = total-left;min = Math.min(min,Math.abs(left-right));}System.out.println(min);}/*** 横向统计 -- 累加每个数组的最后一个元素* @return*/public static int sumY(int[][] sum,int y,int m){int res = 0;for (int i = 0; i <= y; i++) {res += sum[i][m-1];}return res;}/*** 纵向统计* @return*/public static int sumX(int[][] sum,int x,int n){int res = 0;for (int i = 0; i < n; i++) {res += sum[i][x];}return res;}
}
总结
数组通常的考察方向有三点:
- 二分法
- 双指针(快慢指针/对向指针/滑动窗口)
- 关键是需要搞清楚什么节点需要移动哪个指针
- 循环不变量原则(最小循环体)
- 前缀和
相关文章:
代码随想录算法训练营第二天 |209.长度最小子数组; 59.螺旋矩阵|| ; 前缀和
今日任务 209.长度最小子数组; 59.螺旋矩阵|| 58.区间和 44.开发商购买土地 209.长度最小的子数组 题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。 题目链接…...
Go语言基础--数据类型(整型、字符型)
转义字符 常用的转义字符有如下: 1)\t : 表示一个制表符,通常使用它可以排版。 2)\n:换行符 3)\\:一个\ 4) \":一个" 5)\r:一个回车 数据类型概述 在 Go 编程语言中,数据类型用于声明函数和变量…...
SpringBoot配置--Profile
目录 使用profile 的原因? proflie 的配置方式 多profile文件方式 profile 激活方式 1 配置文件 2 命令行参数 小结 使用profile 的原因? 用来完成不同环境下,配置动态切换功能的(具体什么意思呢?假设你在A电脑…...
在Go中理解栈和先进先出原则
Go是一种功能强大的编程语言,提供了丰富的数据结构和算法。堆栈是计算机科学中的基本数据结构之一。在本博文中,我们将探讨如何在 Go 中实现和使用堆栈,以及堆栈如何遵循先进先出 (FIFO) 原则。 首先,让我们来看看堆栈是什么以及它…...
Ted靶机渗透测试
一、靶机下载地址 Ted: 1 ~ VulnHub 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.145.0/24 -sn | grep -B 2 "00:0C:29:E2:36:FA" 2、端口扫描 # 使用命令 nmap 192.168.145.214 -p- -sV 3、指纹识别 # 使用命令 whatweb "http://192.168.145.214&…...
【chart.js】折线图给点添加点击事件
var mychart new Chart( ctx,{ type:line", … options:{ hover:{ // 此处最重要,决定是否能选中绑定的点 mode:“nearest” } , onClick:function(event,elements){ // 此为 被点击 的点 firstelement elements[0] // 这个点 属于第几个数据集合…...
旧手机NAS方案
这里写目录标题 1、参考2、alpine-term-v16.0-release.apk下载安装3、电脑端ssh连接3、安装docker3.1 网络配置3.2 配置APK源 1、参考 【Docker与Termux】闲置旧安卓手机上的NAS无缝部署方案 https://blog.csdn.net/AnRanGeSi/article/details/138717589 【Alpine Term】Andr…...
Secure CRT 9.x版本高亮着色配置文件
Secure CRT的网络配置文件高亮显示,还在完善,逐渐适配不同厂商 设备名字自动蓝色高亮显示设备接口名高亮显示IPv4地址、IPv6地址、MAC地址高亮显示掩码、反掩码高亮显示设备SN号高亮显示接口状态、设备状态等高亮显示各路由协议高亮显示 【下载地址】效果…...
kafka无法启动,提示连接zookeeper超时
想必不少人都遇到过这种场景,明明昨天环境还好好的,今天怎么就不行了呢?关键是这种情况,有时候连重启大法都不管用了,顿时陷入了毫无头绪的茫然中。。。 好了,聊回话题本身,因为升级程序&#x…...
mysql5.7.20升级5.7.44
近期安全测试mysql5.7.20有很多的漏洞,考虑升级到5.7.44 问题1:下载5.7.44的版本: 选择安装版本,或者zip解压版本,看上一篇文章 我选择了安装版本; 问题2:做好现场data文件的备份࿱…...
支持S/MIME证书的邮件客户端有哪些?
S/MIME证书,也叫做邮件安全证书,支持安全/多用途互联网邮件扩展协议(S/MIME协议),是通过加密和数字签名来确保电子邮件的安全性、保密性和完整性的数字证书。GDPR、HIPAA、FDA等多个行业都要求邮件发送方在发送邮件时对…...
uniapp本地打包app安装说明
uniapp本地打包app安装说明 目录 uniapp本地打包app安装说明一、打包说明1.HBuilder X 生成本地打包资源2.Android Studio和App离线SDK环境准备2.1 下载Android Studio和 App离线SDK2.2 资源替换2.3 id属性值修改。2.4 添加provider信息到AndroidManifest.xml中的<applicati…...
ddos造成服务器瘫痪后怎么办
在服务器遭受DDoS攻击后,应立即采取相应措施,包括加强服务器安全、使用CDN和DDoS防御服务来减轻攻击的影响。rak小编为您整理发布ddos造成服务器瘫痪后怎么办。 当DDoS攻击发生时,首先要做的是清理恶意流量。可以通过云服务提供商提供的防护措…...
重磅官宣!追光少年【彭禹锦】荣担任中国美育促进网amp;IPA美育中国行代言人
在美育事业蓬勃发展的今天,一位年仅15岁的少年以其非凡的艺术才华和积极向上的精神风貌,成为了万众瞩目的焦点。中国美育促进网与IPA美育中国行正式宣布,才华横溢、正能量满满的追光少年彭禹锦受邀担任“中国美育促进网&IPA美育中国行”代…...
Python 解析GIS的SHP文件
工作中需要处理一些GIS数据,在 Python 中解析地理信息系统 (GIS) 的 Shapefile (.shp) 文件通常可以通过 geopandas 库来完成。geopandas 是基于 pandas 的一个扩展库,它支持地理空间数据的操作和分析。 下面是一个简单的示例,展示如何使用 …...
大模型微调--文章3
原文地址 链接:https://zhuanlan.zhihu.com/p/635848732 思考题 问题1:p-tuning为了解决什么问题?(解决) 答案:该方法的提出主要是为了解决这样一个问题:大模型的Prompt构造方式严重影响下游任…...
游戏测试中需求分析的本质
游戏测试大不同 1.游戏功能模块介绍1.1. 登录模块1.2. 注册模块1.3. 故事情节模块1.4. 动画模块1.5. 音频模块1.6. 结束界面模块1.7. 网络模块1.8. 数据库模块 2.需求文档编写2.1需求的定义2.2需求分类2.3需求分析目标 3.测试用例编写3.1测试用例的定义3.2测试用例拆解包含测试…...
2024零基础入行软件测试全网最全攻略
很多朋友想要入行软件测试,但是都不知道该怎么学。 抽个时间简单的给大家说下,对于0基础的朋友,应该怎么去学习软件测试。 学习软件测试有2条路可以选。 最省事的当然是找个靠谱的培训机构去培训啦,你就什么都不用想了,…...
spring-boot-starter-quartz 自动化配置解析
版本 spring-boot:3.3.4 源码解析 依赖包 spring-boot-starter-quartz 的作用为引入相关依赖: spring-boot-starterspring-context-supportspring-txquartz 自动化配置类 依赖:spring-boot-autoconfigure:3.2.4 文件:org.springframewo…...
DM8 数据库查询版本号以及授权到期时间SQL
1.查看操作系统信息 [root@localhost ~]# cat /etc/.kyinfo [dist] name=Kylin milestone=Server-V10-GFB-Release-ZF9_01-2204-Build03 arch=arm64 beta=False time=2023-01-09 11:04:36 dist_id=Kylin-Server-V10-GFB-Release-ZF9_01-2204-Build03-arm64-2023-01-09 11:04:…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
