DAY2 - 209.长度最小的子数组,59.螺旋矩阵II,区间和,开发商购买土地

news/2025/3/16 21:56:56/文章来源:https://www.cnblogs.com/chloechen/p/18775790

209.长度最小的子数组

子数组元素之和大于等于target

重点:滑动窗口

为什么用滑动窗口?子数组是连续的

一开始自己写的:

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0;int right=0;int minlen=numeric_limits<int>::max();int sum=0;while(right<nums.size()){int len=right-left+1;if(sum==target){minlen=(len<minlen)?len:minlen;}else if(sum<target){sum+=nums[right++];}else{sum-=nums[left++];}}return minlen;}
};

但是时间超过限制了。问题在于这个循环条件 while(right<nums.size())并不是每一次都更新的,所以相当于还是暴力解法。而且题目说的是大于等于target,而不是等于。

换一个方式来思考这个问题:暴力解法是两个for循环,一个是数组起始位置,一个是数组结束位置。现在要用一个for循环来解决问题,那么这个for循环应该是标记数组的结束位置,也就是窗口right。for循环内部则是用一个while来移动滑动窗口起始位置。

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0;int minlen=INT32_MAX;int sum=0;for(int right=0;right<nums.size();right++){sum+=nums[right];while(sum>=target){int len=right-left+1;minlen=min(len,minlen);sum-=nums[left++]; //  减少一个元素看是否仍然符合条件,尝试更小值}}return minlen==INT32_MAX ? 0:minlen;}
};

59.螺旋矩阵II

没啥技巧,就是考验对转圈的控制能力

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n,vector<int>(n,0));int loop=n/2; //要转几圈int start=0;int cnt=1;int offset=1; //这个自己没想到int i,j;while(loop--){i=start;j=start;//上边for(j; j<n-offset; j++){res[i][j]=cnt++;}//右边for(i; i<n-offset; i++){res[i][j]=cnt++;}//下边for(j; j>start; j--){ // 注意这个边界条件res[i][j]=cnt++;}//左边for(i; i>start; i--){res[i][j]=cnt++;}start++;offset++;}if(n%2){res[n/2][n/2]=n*n;}return res;}
};

设置 offset 变量是我一开始没想到的,用这个可以保证每转一圈就内推一格

区间和

核心思想:前缀和 presum [a,b]sum=p[b]-p[a-1]

#include <iostream>
#include <vector>
using namespace std;int main(){int n,a,b;cin >> n;int presum=0;vector<int> p(n);int cur;for(int i=0; i<n; i++){cin >> cur; // scanf("%d", &vec[i]);presum+=cur;p[i]=presum;}int sum;while(cin >> a >> b){ //while (~scanf("%d%d", &a, &b))if(a==0) sum=p[b];else sum=p[b]-p[a-1];cout << sum << endl;// printf("%d\n", sum);}return 0;}

C++ 代码 面对大量数据 读取 输出操作,最好用scanf 和 printf,耗时会小很多:

开发商购买土地

区间和的应用,分成了行区间和/列区间和

#include <iostream>
#include <vector>
#include <climits>
using namespace std;int main(){int n,m;cin>>n>>m;vector<int> sn(n,0);vector<int> sm(m,0);vector<vector<int>> nums(n, vector<int>(m)) ;int sum=0;for (int i=0; i<n; i++){for (int j=0; j<m; j++){cin>>nums[i][j];sum=sum+nums[i][j];sn[i]+=nums[i][j];//横前缀和(压缩列)sm[j]+=nums[i][j];//纵前缀和(压缩行)}}int minSum=INT_MAX;//横切int hengSum=0;for (int hengCnt=0;  hengCnt<n-1; hengCnt++){hengSum+=sn[hengCnt];minSum=min(minSum,abs(sum-hengSum-hengSum));//abs((sum-hengSum)-hengSum) 是两半划分的差值}//纵切int shuSum=0;for (int shuCnt=0;  shuCnt<m-1; shuCnt++){shuSum+=sm[shuCnt];minSum=min(minSum,abs(sum-shuSum-shuSum));}cout << minSum;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20242313 2024-2025-2 《Python程序设计》实验一报告

20242313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2423 姓名:曾海鹏 学号:20242313 实验教师:王志强 实验日期:2025年3月16日 必修/选修:公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并…

nn.Embedding()函数详解

nn.Embedding()函数详解 nn.Embedding()函数:随机初始化词向量,词向量在正态分布N(0,1)中随机取值 输入: torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None) num…

htb Authority

端口扫描 nmap -sC -sV -p- -Pn -T4 10.10.11.222 Starting Nmap 7.92 ( https://nmap.org ) at 2024-10-04 19:42 CST Nmap scan report for 10.10.11.222 (10.10.11.222) Host is up (0.40s latency). Not shown: 65506 closed tcp ports (reset) PORT STATE SERVICE …

蓝桥杯14届省B

蓝桥杯14届省赛B组A:int a[105]; int day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//记录每个月有多少天 set<int> st;//记录不重复的日期void check(int mm,int dd){if (mm>12||mm<1||dd<1||dd>day[mm]) return;else st.insert(mm*100+dd);//st存日期 …

docker 安装 oracle database 问题记录

pre本地docker (WSL)安装运行 Oracle1. 镜像处理参考链接:https://www.cnblogs.com/wuchangsoft/p/18344847 oracle 镜像获取:https://container-registry.oracle.com/ords/f?p=113:10:::::: (Oracle官网,由于部分问题导致直接pull无法拉取) 阿里云,参考链接里有个个人19…

20242103 实验一《Python程序设计》实验报告

20242103 《Python程序设计》实验1报告 课程:《Python程序设计》 班级: 2421 姓名: 李雨虓 学号:20242103 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容: 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试…

20241313 2024-2025-2 《Python程序设计》实验一报告

20241313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2413 姓名: 刘鸣宇 学号:20241313 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

mutatingwebhook的简单实例

一. k8s集群准备 这里不再赘述k8s集群搭建。主要注意参数:kubectl get po kube-apiserver-server -n kube-system -o yaml | grep plugin 预期结果为:- --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook 至少要拥有两个参数…

Tauri新手向 - 基于LSB隐写的shellcode加载器

此篇是记录自己初次学习tauri开发工具,包含遇到的一些问题以及基本的知识,也给想上手rust tauri的师傅们一些小小的参考。此项目为保持免杀性暂不开源,希望各位师傅多多支持,反响可以的话后续会放出代码大家一起交流学习。ShadowMeld - 基于图像隐写技术的载荷生成框架 通过…

P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G(缩点)

P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G 题目背景 本题测试数据已修复。 题目描述 每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 \(A\) 喜欢 \(B\),\(…