当前位置: 首页 > news >正文

【代码随想录算法训练营——Day2】数组——209.长度最小的子数组、59.螺旋矩阵II、区间和、开发商购买土地

LeetCode题目链接
https://leetcode.cn/problems/minimum-size-subarray-sum/
https://leetcode.cn/problems/spiral-matrix-ii/
https://kamacoder.com/problempage.php?pid=1070
https://kamacoder.com/problempage.php?pid=1044

题解
209.长度最小的子数组
拿到手题目一想到就是暴力解法,也就是一层for循环遍历开头,一层for循环遍历结尾,计算子数组的和。
看了题解后,采用双指针,本题又可以称为滑动窗口的方法来做,具体做法主要如下:设定j为结尾指针,i为开始指针,以j为结尾向后遍历数组并计算临时和sum,当sum的值>=target时(=target时还要while循环是因为题目要求的是大于等于,如果去掉=号那么将求的是大于,即总和大于target的长度最小的子数组),让开始指针向后移动,同时计算子数组长度,存为result值,result在初始化时要设为最大值。
注意当result仍为初始的最大值时,要返回0,证明此时没有长度的数组满足target条件。

59.螺旋矩阵II
拿到题目第一个想法是区分奇数和偶数,奇数要额外添上中心的那个数,其余就是按照上、右、下、左的顺序来填充,并且每一次为左闭右开区间。但是怎么循环螺旋填充不知道,因此查看题解(请看视频)。
如何控制圈的层数,这里设了3个变量来实现,startx用来确定行初始位置,starty为列,offset为末尾位置,整个正方形不包含中心坐标的循环次数是n/2次,且每次末尾位置为n-offset。且注意采用左闭右开区间的话,每个for循环的末尾值都要留一个值出来。注意每个循环的(包括while和for)的条件,注意循环内部的下标取值,注意控制变量的++,具体看代码写代码即可,也可看视频回顾。

区间和
普通遍历时间复杂度是O(n),利用前缀和的思想可以降低复杂度,先计算出数组的前缀和,然后对于每个查询,通过前缀和数组快速计算区间和(来自chatGPT)。

开发商购买土地
(之后再补)

代码

//209.长度最小的子数组
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int i = 0, j = 0, result = INT_MAX;int sum = 0;for (;j < nums.size();j++) {sum += nums[j];while (sum >= target) {int subL = j - i + 1;result = min(result, subL);sum -= nums[i];i++;}}if (result == INT_MAX) return 0;return result;}
};int main() {Solution s;vector<int> nums = { 1,1,1,1,1,1,1,1 };int target = 11;printf("%d", s.minSubArrayLen(target, nums));return 0;
}
//59.螺旋矩阵II
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> result(n, vector<int>(n, 0));int startx = 0, starty = 0;int offset = 1, count = 1;int round = n / 2;while (round--) {for (int j = starty;j < n - offset;j++) {result[startx][j] = count++;}for (int i = startx;i < n - offset;i++) {result[i][n - offset] = count++;}for (int j = n - offset;j > starty;j--) {result[n - offset][j] = count++;}for (int i = n - offset;i > startx;i--) {result[i][starty] = count++;}startx++;starty++;offset++;}if (n % 2 == 1) result[n / 2][n / 2] = count++;return result;}
};int main() {int n = 4;Solution s;vector<vector<int>> result = s.generateMatrix(n);for (int i = 0;i < result.size();i++) {for (int j = 0;j < result[0].size();j++) {printf("%d ", result[i][j]);}printf("\n");}return 0;
}
//区间和
#include <iostream>
#include <vector>
using namespace std;int CountSum(vector<int> nums, int i, int j) {int sum = 0;for (int k = i; k <= j; k++) {sum += nums[k];}return sum;
}int main() {int n;cin >> n;vector<int> nums(n, 0), sums(n, 0);for (int i = 0;i < n;i++) {cin >> nums[i];}sums[0] = nums[0];for (int i = 1;i < n; i++) {sums[i] = sums[i - 1] + nums[i];}int start, end;while (cin >> start >> end) {//cout << CountSum(nums, start, end) << endl;cout << sums[end] - sums[start] + nums[start] << endl;}return 0;
}

文章转载自:

http://Vxy3pZoP.krfpj.cn
http://LnTy99jk.krfpj.cn
http://vIP5njf6.krfpj.cn
http://biYxhEFl.krfpj.cn
http://boBLlxj3.krfpj.cn
http://KI6WvZo6.krfpj.cn
http://BariuNx0.krfpj.cn
http://Eiz8Wy83.krfpj.cn
http://NbdvPgzL.krfpj.cn
http://dwIdOOaG.krfpj.cn
http://41oZhT4X.krfpj.cn
http://87GEbbL4.krfpj.cn
http://vaImuuvb.krfpj.cn
http://iedVjw7J.krfpj.cn
http://sskGqsr5.krfpj.cn
http://sdXzminA.krfpj.cn
http://vmMHaGGE.krfpj.cn
http://lsIGkCsW.krfpj.cn
http://klrmLNi5.krfpj.cn
http://BWwtzXBY.krfpj.cn
http://goZd7BRn.krfpj.cn
http://J650M5cV.krfpj.cn
http://44RAtD9t.krfpj.cn
http://jRq0VzLm.krfpj.cn
http://7v5VoBMS.krfpj.cn
http://QHRPTxo8.krfpj.cn
http://rXnClNpt.krfpj.cn
http://W6hSERYQ.krfpj.cn
http://NgAbZijC.krfpj.cn
http://qFH8fTeZ.krfpj.cn
http://www.dtcms.com/a/367156.html

相关文章:

  • LinuxC++项目开发日志——高并发内存池(1-定长内存池)
  • 【提示词技巧】顺序位置对效果的影响
  • QT-菜单栏、工具栏和状态栏
  • Qt QJsonObject
  • 我辞职了,接替我的人私底下找我,我直接把她删了。明明有个交接群,她是觉得在群里提问会显得自己不够专业吗? 网友:凭啥惯着
  • Docker(②创造nginx容器)
  • 2025年B端产品经理进阶指南:掌握这些计算机专业技能,决胜职场!
  • 2025职场进阶:B端产品经理必备的计算机专业技能精要
  • 2025 年职场必看:B 端产品经理优化产品的计算机专业技能全解析​
  • 拉格朗日多项式
  • Elasticsearch面试精讲 Day 8:聚合分析与统计查询
  • 第13章 Jenkins性能优化
  • WebView安全实现(二)
  • push pop 和 present dismiss
  • macOS下基于Qt/C++的OpenGL开发环境的搭建
  • Swift 解法详解:LeetCode 371《两整数之和》
  • 【前端:Html】--5.进阶:APIs
  • 学习commonJS和esModuleJS的代码记录上传到git
  • WordPress搭建个人网站(Linux版)
  • 在VMware的Win10虚拟机中安装使用ENSP
  • Xterminal软件下载_Xterminal ssh远程链接工具下载__Xterminal安装包 网盘下载_Xterminal ssh远程链接工具安装包
  • 2025React面试题集锦
  • 力扣190:颠倒二进制位
  • Elixir通过Onvif协议控制ip摄像机,扩展ExOnvif的获取预置位列表GetPresets
  • 《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读
  • 移动端固定资产盘点如何落地?系统操作全指南
  • 工业控制的“智慧大脑”:数字孪生技术如何预判生产风险?
  • 2025国赛B题保姆级教程思路分析 碳化硅外延层厚度的确定
  • 蔚来8月狂卖3.1万辆,反超理想引热议!
  • 【面试题】介绍一下BERT和GPT的训练方式区别?