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

【算法刷题之数组篇(2)】

目录

  • 1.leetcode-35. 搜索插入位置(简单)
  • 2.leetcode-74. 搜索二维矩阵(中等)
  • 3.leetcode-73. 矩阵置零(中等)
  • 4.leetcode-56. 合并区间(中等)
  • 5.leetcode-54. 螺旋矩阵(中等)
  • 6.leetcode-1. 两数之和(简单)

1.leetcode-35. 搜索插入位置(简单)

(1)题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
在这里插入图片描述
(2)方法及思路(二分查找)
考虑这个插入的位置 pos,它成立的条件为:
nums[pos−1]<target≤nums[pos] ;
问题转化到这里,直接套用二分法即可,即不断用二分法逼近查找第一个大于等于 target的下标 。
(3)代码实现

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int n = nums.size();int l=0,r=n-1;while(l<=r){int mid=l+(r-l)/2;if(nums[mid]<target)l=mid+1;else r=mid-1;}return l;}
};

2.leetcode-74. 搜索二维矩阵(中等)

(1)题目描述
给你一个满足下述两条属性的 m x n 整数矩阵:
每行中的整数从左到右按非递减顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

在这里插入图片描述
(2)思路与方法(二分查找)
1.首先先把此二维数组看作是一个一维数组的变形。
2.若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,我们可以在该数组上二分找到目标元素。
3.代码实现时,可以二分升序数组的下标,将其映射到原矩阵的行和列上。
(3)代码实现

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size(), n = matrix[0].size();int low = 0, high = m * n - 1;while (low <= high) {int mid = (high - low) / 2 + low;int x = matrix[mid/n][mid%n];if (x < target) {low = mid + 1;} else if (x > target) {high = mid - 1;} else {return true;}}return false;}
};

(特别要注意二分后mid的下标)

3.leetcode-73. 矩阵置零(中等)

(1)题目描述
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
在这里插入图片描述

(2)方法及思路(使用标记数组)
1.先定义两个一维数组,分别代表行和列
2.遍历一遍数组,找出0元素所在的行和列,并在已定义的数组中用true赋值标记出来。
3.再次遍历数组,当遍历到被标记的行或列时,就将其值改为0。
(3)代码实现

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int m=matrix.size();int n=matrix[0].size();vector<int> row(m),col(n);for(int i=0;i<m;++i){for(int j=0;j<n;++j){if(!matrix[i][j]){row[i]=col[j]=true;}}}for(int i=0;i<m;++i){for(int j=0;j<n;++j){if(row[i]||col[j]){matrix[i][j]=0;}}}} 
};

4.leetcode-56. 合并区间(中等)

(1)题目描述
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
在这里插入图片描述
(2)方法及思路(排序)
思路
如果我们按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的:
在这里插入图片描述
算法
1.我们用数组 merged 存储最终的答案。
2.首先,我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入 merged 数组中,并按顺序依次考虑之后的每个区间:
3.如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组 merged 的末尾;
4.否则,它们重合,我们需要用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。

(3)代码实现

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()==0){return {};}vector<vector<int>> merged;sort(intervals.begin(),intervals.end());for(int i=0;i<intervals.size();++i){int left=intervals[i][0];int right=intervals[i][1];if(!merged.size()||merged.back()[1]<left){merged.push_back({left,right});}else{merged.back()[1]=max(merged.back()[1],right);}}return merged;}
};

5.leetcode-54. 螺旋矩阵(中等)

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
在这里插入图片描述
(2)方法及思路(模拟)
可以模仿上一篇文章中的螺旋寻找
函数接受一个二维数组matrix作为参数,并返回一个一维数组ans。函数首先获取二维数组的行数和列数,然后使用topbottomleftright来表示当前螺旋循环的边界。count表示剩余要输出的元素个数。
在循环中,首先从左到右输出上边界的元素,每输出一个元素,count减1并将其添加到ans中。然后将top加1,表示上边界收缩。接下来从上到下输出右边界的元素,并更新右边界。之后从右到左输出下边界的元素,更新下边界。最后从下到上输出左边界的元素,更新左边界。每次循环结束时,检查count是否大于等于1,如果是则继续循环,否则退出循环。
最后返回ans
(3)代码实现

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int m=matrix.size();int n=matrix[0].size();int top=0;int bottom=m-1;int left=0;int right=n-1;int count=m*n;while(count>=1){for(int i=left;i<=right&&count>=1;++i) {ans.push_back(matrix[top][i]);count--;}top++;for(int i=top;i<=bottom&&count>=1;++i){ ans.push_back(matrix[i][right]);count--;}right--;for(int i=right;i>=left&&count>=1;--i) {ans.push_back(matrix[bottom][i]);count--;}--bottom;for(int i=bottom;i>=top&&count>=1;--i) {ans.push_back(matrix[i][left]);count--;}left++;}return ans;}
};

6.leetcode-1. 两数之和(简单)

(1)题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
在这里插入图片描述
(2)方法及思路(双指针)
先在头上定义一个指针,在其后面也定义一个指针,然后循环找出符合要求的数。
(3)代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();vector<int> result;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (nums[i] + nums[j] == target) {vector<int> result;result.push_back(i);result.push_back(j);return result;}}}return result;}
};

相关文章:

【算法刷题之数组篇(2)】

目录 1.leetcode-35. 搜索插入位置&#xff08;简单&#xff09;2.leetcode-74. 搜索二维矩阵&#xff08;中等&#xff09;3.leetcode-73. 矩阵置零&#xff08;中等&#xff09;4.leetcode-56. 合并区间&#xff08;中等&#xff09;5.leetcode-54. 螺旋矩阵&#xff08;中等…...

chromedriver.exe 的所有版本下载地址

Chrome for Testing availability 上面的网址是V115 v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值&#xff0c;记录的原因是因为突然发现过去的py无法运行&#xff0c;原因是chrome浏览器偷偷升级到V115&#xff0c;于是找…...

C++ 网络编程项目fastDFS分布式文件系统(四)-fastCGI项目相关技术以及linux搜狗输入法相关问题。

目录 1. Nginx作为web服务器处理请求 2. http协议复习 Get方式提交数据 Post方式提交数据 3. fastCGI 3.1 CGI 3.2 fastCGI 3.3 fastCGI和spawn-fcgi安装 1. 安装fastCGI 2. 安装spawn-fcgi 3.4 nginx && fastcgi 4其他知识点 1. fastCGI环境变量 - fas…...

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

【引言】 “JS卡片支持为组件设置action&#xff0c;包括router事件和message事件&#xff0c;其中router事件用于应用跳。若设置router事件&#xff0c;则action属性值为"router"&#xff1b;abilityName为卡片提供方应用的跳转目标Ability名&#xff1b;params中的…...

【linux】debian10安装vim

debian10.0上用apt vim安装vim提示依赖的版本冲突。后来发现是软件源没有添加更新源buster-updates。 以下是问答。 问&#xff1a;debian10怎么安装vim? 答&#xff1a; 在 Debian 10 系统上安装 Vim 的方法很简单,主要有以下两种: 1. 使用 apt 命令安装 bash sudo apt u…...

文件同步工具rsync

文章目录 作用特性安装命令服务端启动增加安全认证及免密登录 实时推送源服务器配置结合inotify实现实时推送 参数详解 学些过程中遇到的问题 作用 rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或…...

【嵌入式开发 Linux 常用命令系列 12 -- linux 下 log 输出重定向 详细介绍 】

文章目录 Linux 输出重定向使用背景Linux 重定向使用介绍 上篇文章&#xff1a;嵌入式开发 Linux 常用命令系列 11 – linux 下 任务与CPU绑定命令 taskset 详细介绍 Linux 输出重定向使用背景 在Linux中&#xff0c;输入和输出重定向是非常常见的操作&#xff0c;它们可以用…...

gin中关于参数注入问题

关于参数注入的问题 如果在开发中一旦发小参数没有按照既定的要求注入到结构体的话&#xff0c;这个时候就一定要看请求方式什么&#xff1f;如果是post请求、 前端—post—json{id:1,pageSize:10,page:1}———————————- 参数注入方法&#xff1a;ShouldBindJSON p…...

记录首次面试2023-08-18

人生第一次面试&#xff0c;大概一个小时左右。没有问我C的&#xff0c;上来一个数据库事务&#xff0c;虽然没有复习&#xff0c;但是还是能够记住一些&#xff0c;主要问的一些事务的隔离级别&#xff0c;以及都有什么作用&#xff0c;我是举例回答的&#xff0c;客户端A和客…...

【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER

文章目录 前言LANE_CHANGE_DECIDER功能简介LANE_CHANGE_DECIDER相关配置LANE_CHANGE_DECIDER总体流程LANE_CHANGE_DECIDER相关子函数PrioritizeChangeLaneUpdateStatusIsClearToChangeLaneHysteresisFilter 参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算法原理与实…...

rabbitmq的死信队列

目录 成为死信的条件 消息TTL过期 队列达到最大长度 消息被拒 延迟队列 延迟队列使用场景 消息设置 TTL 队列设置 TTL 两者区别 producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c; consumer 从 queue 取出消息 进行消费&#xff0c;但某些时候由…...

利用网络对拷工具进行系统安装与恢复

各学校计算机机房经常批量安装操作系统和应用软件。实现对批量计算机的安 装&#xff0c;应用较多的是使用 Symantec 的 ghost 企业版。但笔者采用的是网络还原精灵 &#xff08;Net Recovery Genius&#xff09;软件附带的网络对拷 Ncp.com 工具&#xff0c;利用它能够轻松实…...

opencv-python使用鼠标点击图片显示该点坐标和像素值IPM逆透视变换车道线二值化处理

OpenCV的鼠标操作 实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback()&#xff0c;即鼠标事件回调 setMouseCallback(winname, onMouse,userdata0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据…...

AIGC绘画:kaggle部署stable diffusion项目绘画

文章目录 kaggle介绍项目部署edit my copy链接显示 结果展示 kaggle介绍 Kaggle成立于2010年&#xff0c;是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲&#xff0c;可以提供一些数据&#xff0c;进而提出一个实际需要解决的问题&#xff1b;从参赛者的角度来讲&…...

微服务概述-7

Shiro 框架 Shiro 是一个用于 Java 应用程序的安全框架。它提供了身份验证、授权、加密和会话管理等功能&#xff0c;可以帮助开发人员构建安全可靠的应用程序。 Java 中针对权限管理常见的有 2 个著名的框架&#xff1a;spring security 和 shiro shiro 基本概念 credentia…...

十二、Linux如何修改文件/文件夹所属用户or用户组?chown命令

目录 1、基础语法 2、修改目标用户&#xff1a; 3、修改用户组&#xff1a; 4、使用-R命令&#xff0c;并同时修改用户/用户组 1、基础语法 chown [-R] [目标用户][:][目标用户组] 被修改文件/文件夹 &#xff08;1&#xff09;选项-R&#xff1a;同chmod&#xff0c;对文…...

企业百家号蓝V认证后,百度营销基木鱼落地页如何嵌入百家号中

首先搭建百度营销基木鱼落地页 在我们的百度营销后台&#xff0c;点击基木鱼跳转至百度营销基木鱼页面&#xff0c;在我的站点位置&#xff0c;可以创建H5站点&#xff0c;PC站点等&#xff0c;创建完成后可以点击复制基木鱼落地页的链接。 注意事项 1、企业百家号需要进行…...

Redis缓存读写策略(三种)数据结构(5+3)

Redis缓存读写策略&#xff08;三种&#xff09; Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式&#xff0c;比较适合读请求比较多的场景。 写&#xff1a; 先更新 db然后直接删除 cache 。 读 : …...

计算机竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…...

使用python向窗口发送鼠标点击命令

今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断&#xff1a;一段时间没有鼠标活动&#xff0c;视频就会暂停。于是就想&#xff0c;能否隔一段时间就模拟鼠标点击一下视频暂停&#xff0c;再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...