news 2026/5/13 7:20:24

数组算法分享 | 代码随想录(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/5/10 17:04:53

【大数据毕设全套源码+文档】基于Django+协同过滤算法的电影个性化推荐系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/12 17:06:07

基于Python 医药信息管理系统(源码+数据库+文档)

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

作者头像 李华
网站建设 2026/5/7 13:21:21

1小时搞定:用PLAYWRIGHT快速验证产品创意

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速验证产品创意的PLAYWRIGHT原型&#xff0c;功能包括&#xff1a;1.自动采集竞品关键页面截图 2.提取核心功能点对比 3.生成可视化对比报告 4.模拟用户旅程。要求支持配…

作者头像 李华
网站建设 2026/5/13 5:25:01

nTopology平台自动生成适配不同热源分布的流道拓扑。

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 &#x1f48c;公众号&#xff1a;莱歌数字&#xff08;B站同名&#xff09; &#x1f4f1;个人微信&#xff1a;yanshanYH 211、985硕士&#xff0c;从业16年 从…

作者头像 李华
网站建设 2026/5/12 13:50:21

传统调试vsAI辅助:修复SyntaxError的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试工具&#xff0c;能够&#xff1a;1. 生成包含SyntaxError的测试代码样本&#xff1b;2. 记录人工修复这些错误所需的时间&#xff1b;3. 使用AI自动修复同样的错…

作者头像 李华
网站建设 2026/5/12 21:28:14

网上超市系统(源码+数据库+文档)

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

作者头像 李华