news 2026/5/1 4:02:13

数组算法分享 | 代码随想录(CPP+LeetCode)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数组算法分享 | 代码随想录(CPP+LeetCode)

总览

    • [704. 二分查找](https://leetcode.cn/problems/binary-search/)
    • [27. 移除元素](https://leetcode.cn/problems/remove-element/)
    • [977. 有序数组的平方](https://leetcode.cn/problems/squares-of-a-sorted-array/)
    • [209. 长度最小的子数组](https://leetcode.cn/problems/minimum-size-subarray-sum/)
    • [59. 螺旋矩阵 II](https://leetcode.cn/problems/spiral-matrix-ii/)
    • C++ Vector 使用指南
      • 一维 Vector(动态数组)
        • 基本概念
        • 常见用法
      • 二维 Vector(矩阵)
        • 1️⃣ 声明和初始化二维 Vector
        • 2️⃣ 访问和修改元素
        • 3️⃣ 遍历二维 Vector

后面有 C++ 中 vector 一维、二维数组的使用说明


704. 二分查找

给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果target存在返回下标,否则返回-1

你必须编写一个具有O(log n)时间复杂度的算法。

classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){intmid=left+(right-left)/2;// 防止溢出if(nums[mid]==target){returnmid;// 找到目标,返回索引}elseif(nums[mid]<target){left=mid+1;// 目标在右半部分}else{right=mid-1;// 目标在左半部分}}return-1;// 未找到目标}};

27. 移除元素

给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。

假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:

classSolution{public:intremoveElement(vector<int>&nums,intval){intslow=0;for(intfast=0;fast<nums.size();fast++){if(nums[fast]!=val){nums[slow++]=nums[fast];}}returnslow;}};

977. 有序数组的平方

给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

classSolution{public:vector<int>sortedSquares(vector<int>&nums){intk=nums.size()-1;vector<int>res(k+1);intright=k;intleft=0;while(k!=-1){intleftsquare=nums[left]*nums[left];intrightsquare=nums[right]*nums[right];if(leftsquare>rightsquare){res[k--]=leftsquare;left++;}else{res[k--]=rightsquare;right--;}}returnres;}};

209. 长度最小的子数组

给定一个含有n个正整数的数组和一个正整数target

找出该数组中满足其总和大于等于target的长度最小的子数组[nums[l], nums[l+1], ..., nums[r-1], nums[r]],并返回其长度。如果不存在符合条件的子数组,返回0

classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){inti=0;intsum=0;intres=nums.size()+1;for(intj=0;j<nums.size();j++){sum+=nums[j];while(sum>=target){intlen=j-i+1;res=(len<res)?len:res;sum-=nums[i];i++;}}if(res==(nums.size()+1))return0;elsereturnres;}};

59. 螺旋矩阵 II

给你一个正整数n,生成一个包含1所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix

classSolution{public:vector<vector<int>>generateMatrix(intn){vector<vector<int>>matrix(n,vector<int>(n,0));inttop=0,bottom=n-1;intleft=0,right=n-1;intnum=1;while(top<=bottom&&left<=right){for(intcol=left;col<=right;col++){matrix[top][col]=num++;}top++;for(introw=top;row<=bottom;row++){matrix[row][right]=num++;}right--;if(top<=bottom){for(intcol=right;col>=left;col--){matrix[bottom][col]=num++;}bottom--;}if(left<=right){for(introw=bottom;row>=top;row--){matrix[row][left]=num++;}left++;}}returnmatrix;}};

C++ Vector 使用指南

一维 Vector(动态数组)

vector<int>是C++标准库中的动态数组容器,用来存储整数。

基本概念
常见用法
#include<vector>usingnamespacestd;// 声明和初始化vector<int>nums={-1,0,3,5,9,12};// 创建并初始化vector<int>arr(5);// 创建大小为5的向量// 访问元素intfirst=nums[0];// 访问第一个元素intsize=nums.size();// 获取大小// 添加元素nums.push_back(15);// 在末尾添加元素// 遍历for(inti=0;i<nums.size();i++){cout<<nums[i]<<" ";}

二维 Vector(矩阵)

1️⃣ 声明和初始化二维 Vector
// 方式1:声明空的二维 vectorvector<vector<int>>matrix;// 方式2:创建 n x n 的二维 vector,所有元素初始化为0vector<vector<int>>matrix(n,vector<int>(n,0));// 方式3:创建 m x n 的矩阵,初始化为特定值vector<vector<int>>matrix(m,vector<int>(n,5));// m行 n列,都是5
2️⃣ 访问和修改元素
vector<vector<int>>matrix(3,vector<int>(3,0));// 访问元素intvalue=matrix[0][1];// 第0行,第1列// 修改元素matrix[0][1]=10;// 动态添加行matrix.push_back(vector<int>{1,2,3});// 在某行添加列matrix[0].push_back(4);
3️⃣ 遍历二维 Vector
// 方式1:使用索引for(inti=0;i<matrix.size();i++){for(intj=0;j<matrix[i].size();j++){cout<<matrix[i][j];}}// 方式2:使用范围for循环for(auto&row:matrix){for(intval:row){cout<<val;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 10:15:47

驾校管理|基于springboot + vue驾校管理系统(源码+数据库+文档)

驾校管理 目录 基于springboot vue驾校管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue驾校管理系统 一、前言 博主介绍&#xff1a;✌️大…

作者头像 李华
网站建设 2026/4/23 17:50:27

数组算法-双指针

首先&#xff0c;双指针法&#xff0c;本质是通过两个索引&#xff08;指针&#xff09; 在数组上移动&#xff0c;用一次遍历&#xff08;O (n) 时间复杂度&#xff09;替代嵌套循环&#xff08;O (n)&#xff09;&#xff0c;核心是用空间换时间&#xff08;仅额外使用两个变…

作者头像 李华
网站建设 2026/4/16 13:30:50

小白必看:免费域名申请避坑指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式新手向导&#xff1a;1.解释域名/DNS等基础概念 2.分步动画演示注册流程 3.高亮显示关键表单字段 4.内置模拟练习环境 5.提供术语词典。使用React开发响应式界面&am…

作者头像 李华
网站建设 2026/4/30 11:49:54

零基础理解哈夫曼树:从原理到实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式哈夫曼树学习工具。功能&#xff1a;1. 分步动画演示建树过程&#xff1b;2. 可调节的模拟数据输入&#xff1b;3. 实时显示编码结果&#xff1b;4. 简单的练习题和…

作者头像 李华
网站建设 2026/4/24 16:29:26

不用安装BurpSuite!在线模拟器快速体验抓包过程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个BurpSuite在线模拟器应用&#xff0c;功能包括&#xff1a;1. 虚拟HTTP请求/响应生成器 2. 可视化数据包修改界面 3. 常见漏洞模式自动检测 4. 生成简易测试报告。要求使用…

作者头像 李华