c++ 算法学习第二天|数组

c++ 算法学习第二天|数组

数组专题学习安排与要点总结

一、209. 长度最小的子数组(滑动窗口)

🎯学习重点

  • 第一次系统理解「滑动窗口」思想**
  • 理解「窗口不是固定大小,而是动态伸缩」
  • 明确两个指针的含义:
    • left:窗口起点
    • right:窗口终点
  • 核心逻辑:
    • 先扩张窗口(right++)
    • 当条件满足时,尝试收缩窗口(left++)
  • 明白:
    • 为什么是 while (sum >= target)
    • 为什么可以在 O(n) 内完成

⚠️ 学习建议

  • 文字讲解偏抽象,建议直接看洛谷题解的动图 先理解「窗口在动」

我一开始想成先把数组换成升序数组,然后再从后面累加到大于targe就好,
但忽略了题目中是要求连续数组,所以不能用这种方法

  • 这时候用滑动窗口就可以完美解决 自己解的代码如下
classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int end =0, ans =1e6;int sum =0;for(int start =0; start < nums.size();){while(sum < target && end < nums.size()){ sum += nums[end]; end++;}if(sum >= target){ ans =min(ans,end-start); sum -= nums[start]; start++;}elsebreak;}if(ans ==1e6)return0;elsereturn ans;}};
  • 官方题解 我觉得更好
classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int n = nums.size();if(n ==0)return0;int ans = INT_MAX;int start =0, end =0;int sum =0;while(end < n){ sum += nums[end];while(sum >= target){ ans =min(ans, end - start +1); sum -= nums[start]; start++;} end++;}return ans == INT_MAX ?0: ans;}};


二、59. 螺旋矩阵 II(模拟 + 区间定义)

学习重点

  • 本质是「模拟」问题,不是数学题
  • 核心在于:
    • 转圈的顺序
    • 每一圈的边界定义
  • 学会使用:
    • 左闭右开 / 左闭右闭 即区间思想
  • 理解为什么:
    • 每一圈都要缩小边界
    • 奇数阶矩阵最后有一个中心点

⚠️ 学习建议

  • 写代码前先在电脑画图画 3×3、4×4
  • 搞清楚「一圈」是如何走完的
  • 搞清楚输入n会有几圈,
  • 再敲代码

n是偶数 有n/2圈 比如n=4 有两圈
n是奇数 有n/2圈 圈完还剩中间的一个数

int start =0, x, y;int offset =1, count =1;int loop = n /2; vector<vector<int>>num(n,vector<int>(n,0));while(loop--){for(y = start; y < n - offset; y++){ num[start][y]= count++;}for(x = start; x < n - offset; x++){ num[x][y]= count++;}for(; y > start; y--){ num[x][y]= count++;}for(; x > start; x--){ num[x][y]= count++;} start++; offset++;}if(n %2==1){int mid = n /2; num[mid][mid]= n * n;}
*另外要复习的点
vector二维数组
vector<vector> arr(n,vector(m,0);


三、区间和(前缀和思想)

学习重点

  • 前缀和是一种非常重要且高频的思想
  • 核心公式:sum[l…r] = p[ right ] - p[left - 1]
    • 前缀和解决的问题本质:
  • 把「多次重复计算」变成「一次预处理」
  • 优势:
  • 从 O(n) 查询 → O(1) 查询
  • 适用场景:
  • 多次区间求和
  • 后续会大量用于 DP、哈希、二维数组

本来用一个数组存入,然后for循环累加到sum就好
但是存在一个严重的问题,如果要求计算很多次,即while很多次,时间超时

#include<bits/stdc++.h>usingnamespace std;intmain(){int n,first=0; cin>>n; vector<int>num(n); vector<int>p(n+1,0);for(int i=0; i<n; i++){ cin>>num[i]; first += num[i]; p[i]= first;}int start,end;while(cin>>start>>end){int sum=0;if(start ==0) sum= p[end];else{ sum = p[end]- p[start-1];} cout<<sum<<endl;}}


四、开发商购买土地(前缀和综合应用)

🎯 学习重点

  • 前缀和的实际应用题
  • 核心思想:
  • 横着切 or 竖着切
  • 找到两部分和最接近的方案
  • 关键在于:
  • 如何快速算「一整块区域的和」
  • 训练点:
  • 把抽象问题转化为数组/前缀和模型
#include<bits/stdc++.h>usingnamespace std;intmain(){int n,m; cin>>n>>m; vector<vector<int>>num(n,vector<int>(m,0));int sum=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){ cin>>num[i][j]; sum+=num[i][j];}} vector<int>heng(n);for(int i=0;i<n;i++){for(int j=0;j<m;j++){ heng[i]+= num[i][j];}} vector<int>shu(m);for(int j=0;j<m;j++){for(int i=0;i<n;i++){ shu[j]+= num[i][j];}}int result = INT_MAX;int hengcut;for(int i=0;i<n;i++){ hengcut += heng[i]; result =min(result,abs(sum-hengcut-hengcut));}int shucut =0;for(int j=0;j<m;j++){ shucut += shu[j]; result =min(result,abs(sum-shucut-shucut));} cout<<result<<endl;return0;}

五、数组专题总结(非常重要)

🎯 这两天

  • 建立数组题的整体认知框架:
  • 二分查找
  • 双指针
  • 滑动窗口
  • 前缀和
  • 模拟
  • 明确:
  • 不同题型的「固定解题套路」
  • 什么时候该想到哪种方法
  • 建议:
  • 自己写一份 “数组题常用模板”
  • 以后刷题直接套思想,而不是现想

Read more

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

文章详解AI Agent四大核心概念:Agent作为智能决策主体,Skills提供原子化能力封装,MCP实现标准化工具调用,A2A支持Agent间协作。这些技术共同构建了从单Agent自主执行到多Agent协同工作的完整技术栈,解决了智能体的自主性、模块化能力、工具调用和互操作等核心问题,助力开发者快速构建专业级AI应用。 一、Agent、Skills、MCP和A2A的核心概念总览 1、Agent (代理/智能体):自主决策与执行的“大脑”。 AI Agent是2026年AI生态的核心概念,是基于人工智能技术构建的、具备感知环境、理解信息、自主推理决策、自主规划与执行动作并持续与环境/其他主体交互,以自主达成预设或动态生成目标的数字智能实体。2026年的智能体不是在回答问题,而是在完成任务。其突破了传统问答式、生成式AI的能力边界,可像人类员工一样独立处理复杂综合性任务。它以大模型为核心引擎,整合规划、记忆、工具调用与行动执行四大能力,形成「感知 - 认知 - 决策 - 执行 - 反馈」的完整智能闭环,

By Ne0inhk
毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香!

毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香!

毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香! * 📌 工具地址(直接能用): * ✨ 工具亮点:一贴SQL,秒出ER图 * 🎯 使用方式示意 * 🧰 适用场景:毕设 + 课程设计 + 快速原型设计 * 🆓 其他可配套使用的工具(同一个网站): * 🧠 总结 * 💬 如果觉得实用,欢迎点个赞或收藏,后续我也会分享更多毕业设计 / 技术工具相关内容。也欢迎留言交流你在用哪些工具提升效率! 每到毕业季,很多计算机相关专业的同学都逃不过一个“老大难”任务:数据库设计文档。 建表语句写好了,项目也跑起来了,但老师或答辩组要求提交“ER 图”。这时候,不少同学陷入手动画图的深坑: 用 Visio 太复杂,PowerDesigner 要装半天,还容易报错……最后干脆拿 Excel 画框线,凑个样子就交了。 其实你完全可以用一个免费的在线工具,直接把 SQL

By Ne0inhk

Spring Cloud 概述

目录 微服务 单体架构 集群和分布式架构 横向扩展 纵向扩展 微服务架构 Spring Cloud 什么是 Spring Cloud Spring Cloud 版本 Spring Cloud 实现方案 服务拆分 服务拆分原则 简单示例 服务拆分 数据准备 工程搭建 父工程创建 子项目创建-商品服务 子项目创建-订单服务 远程调用 在学习 Spring Cloud 之前,我们先来了解一下什么是微服务,以及微服务的发展历史。架构发展的过程中,遇到了哪些问题?是如何解决的?Spring Cloud 解决了其中的什么问题? 微服务 单体架构 所有功能模块(如用户管理、订单处理)打包在一个应用中,共享同一数据库,模块间通过函数调用直接通信,开发、测试、

By Ne0inhk

ClawdBot保姆级教学:解决Gateway not reachable错误的5种方法

ClawdBot保姆级教学:解决Gateway not reachable错误的5种方法 1. 什么是ClawdBot?——你的本地AI助手,不是云端玩具 ClawdBot 是一个真正属于你自己的个人 AI 助手。它不依赖远程API、不上传隐私数据、不按调用次数收费——所有推理都在你自己的设备上完成。你可以把它理解成“装在你电脑里的 Siri + Copilot + Notion AI 的混合体”,但更自由、更透明、更可控。 它的核心能力由 vLLM 提供支撑。vLLM 是当前最高效的开源大模型推理引擎之一,以极高的吞吐量和极低的显存占用著称。ClawdBot 利用它来加载和运行像 Qwen3-4B-Instruct 这样的轻量级但能力扎实的模型,让你在消费级显卡(甚至带显存的笔记本)上也能获得接近专业服务的响应速度和对话质量。 和那些动辄要填 API Key、绑定手机号、看广告才能用的 Web 应用不同,ClawdBot 的哲学是:“你装,你用,

By Ne0inhk