备考蓝桥杯:顺序表相关算法题
目录
询问学号
寄包柜
移动0
颜色分类
合并两个有序数组
物品移动
询问学号
我们的思路:创建一个顺序表存储从1开始依次存放进入教室的学生学号,然后查询
#include <iostream>
#include <vector>
using namespace std;
const int N = 2e6+10;//表示教室最多进入学生个数
int main()
{int n,m;cin >> n >> m;vector <int> a1(N);for(int i = 1;i<=n;i++){cin >> a1[i];//输入进入学生的学号}int t;for(int i = 0;i<m;i++){cin >> t;cout << a1[t] << endl;//输出查询到的学号}
}
寄包柜
一共有n个柜子,每个柜子里又有ai个格子,格子里存放物品
我们需要创建一个二维数组,创建二维数组的方式有两个 一种是a[][]
一种是vector <int> a[] 由于我们这里主要是用vector解决问题,所以我们选择vector
注意:顺序表要定义在主函数外面,不然会有栈溢出的风险
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5+10;
vector<int> a[N];//这里初始化每个vector<int>的顺序表空间都是0的,所以我们后续存格子需要扩容
int main()
{int n,q;cin >> n >> q;//输入n个柜子,q次操作int k,i,j;//k是物品数,i是第i个柜子,j是第j个格子while(q--){int op;cin >> op >> i >> j;if(op ==1)//op为1的时候进行放物品的操作,在第i个柜子第j个格子存放k个物品{cin >> k;//存放物品个数if(a[i].size() <= j)//由于编号是从1开始的,所以存第j个物品的话要有j+1个空间{a[i].resize(j+1);}a[i][j] = k;}else{cout << a[i][j]<< endl;}}return 0;
}
移动0
方法1:辅助数组
class Solution {
public:void moveZeroes(vector<int>& nums) {vector <int> nums2(nums.size());int j = 0;for(int i = 0;i<nums.size();i++){if(nums[i] != 0){nums2[j] = nums[i];j++;}}nums = nums2;}
};
方法2,双指针
这种问题就叫数组分块的问题,就是给我们一个条件,让我们把数组左边变为非0右边全变为0,或者左边大于等于某个数,右边小于某个数,这也是快速排序里比较核心的一步,我们可以定义一个cur指针:指向最后一个非零元素,定义一个i指针,扫描数组
[0,cur]永远都是非零元素,[cur+1,i-1]永远都是零元素,[i,n-1]是待扫描区域
那我们遍历顺序表,如果元素是0我们就i++,如果元素是非0那我们就把cur+1并和这个非零元素交换位置,再让i+1扫描下一个元素,最后我们就完成了数组分块操作
class Solution {
public:void moveZeroes(vector<int>& nums) {for (int i =0,cur = -1;i<nums.size();i++){if(nums[i] !=0){swap(nums[i],nums[++cur]);}}}
};
颜色分类
y
我们用sort其实也能通过
class Solution {
public:void sortColors(vector<int>& nums) {sort(nums.begin(),nums.end());}
};
虽然sort能通过,我们还是要学会我们三指针的方法
定义一个left 初始化为-1,i负责扫描数组,right 初始化为n
我们要达到的是数组分三块,所以我们有下面几个要求
[0,left]全为0 [left+1,i-1]全为1,[i,right-1]待扫描 [right,n-1]全为2
所以当我们扫描到的元素是2的时候,我们交换right-1和i的元素并让right--
当我们扫描到的元素是0的时候,我们交换left+1和i位置的元素并让left++,i++
当我们扫描到的元素是1的时候,直接让i++
我们脑子里可以有个动态的画面,当i扫描到0的时候,把这个0划分到0到left区间里,i交换到的一定是1或者0到i-1全是0,所以i继续扫描下一个,如果扫描到1的话直接跳过去,因为left+1到i-1的区间里都是1,如果扫描到2的话就把2划到right到n-1的区间里,那就把2和right-1换一下,right左移。一直到最后,0到left就都是0,left到right就都是1,right到n-1就都是2了
class Solution {
public:void sortColors(vector<int>& nums) {int left = -1,right =nums.size(),i=0;while(i<right){if(nums[i]==1) i++;else if (nums[i] == 2) swap(nums[--right],nums[i]);else swap(nums[i++],nums[++left]);}}
};
合并两个有序数组
方法一,辅助数组
我们建一个辅助数组,然后创建三个指针 cur1 和cur2 和cur都初始化为0
cur1和cur2分别遍历数组1和数组2,比较出小的那个元素放在辅助数组里
直到有一方遍历完,这时候我们再把没遍历完的数组的元素依次拷贝到我们的辅助数组里就好了
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {vector <int> tmp(m+n);int cur1 =0,cur=0,cur2=0;while(cur1<m && cur2<n){if(nums1[cur1] <= nums2[cur2]) tmp[cur++]=nums1[cur1++];else tmp[cur++]=nums2[cur2++];}while(cur1<m) tmp[cur++] = nums1[cur1++];while(cur2<n) tmp[cur++] = nums2[cur2++];for(int i = 0;i<tmp.size();i++) nums1[i] = tmp[i];}};
方法二:原地合并
原地合并的话,我们还是定义cur,cur1,cur2,然后我们遍历数组1和数组2,如果数组1的元素比数组2的元素小的话就cur1++,cur++,如果数组2的元素小,那就把cur2下标的值给cur,cur++,cur2++,但是这种正序遍历会导致数组1原来的值被覆盖,所以我们还要改变一下策略
我们选择反向遍历,cur指向第一个数组的size的最大位置,也就是合并完的最后一个位置,cur1指向第一个数组的当前有效元素的最大位置,cur2指向数组2的最大位置
遍历数组1和数组2,把大的元素赋值给cur所在的位置
如果有一个数组遍历完了,我们要看还有没有哪个数组没遍历完,如果1数组没遍历完就不用管了,因为我们本来就是在1数组的基础上进行的原地合并,如果2数组的元素没遍历完,我们要再写一个循环把2数组的元素依次插进来
我们来实现一下代码
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int cur = nums1.size()-1;int cur1 = m-1;int cur2 = n-1;while(cur1>=0 && cur2>=0){if(nums1[cur1] >= nums2[cur2]) nums1[cur--] = nums1[cur1--];else nums1[cur--] = nums2[cur2--];}while(cur2>=0){nums1[cur--] = nums2[cur2--];}}
物品移动
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N = 30;
int n;
vector <int> p[N];//创建n个放木块的槽
PII find(int x)
{for(int i = 0;i<n;i++){for(int j =0;j<p[i].size();j++){if(p[i][j] == x)return {i,j};}}
}
void clean(int x1,int y1)
{int t;for(int j = y1+1;j<p[x1].size();j++){t = p[x1][j];p[t].push_back(t);}p[x1].resize(y1+1);}
void move(int x1,int y1,int x2)//把x1,y1及其以上的木块放在x2上
{for(int i = y1;i<p[x1].size();i++){p[x2].push_back(p[x1][i]);}p[x1].resize(y1);
}
int main()
{
//初始化 cin >> n;string op1,op2;int a,b;for(int i =0;i<n;i++){p[i].push_back(i);} while(cin >> op1 >> a >> op2 >> b){PII pa = find(a);int x1 = pa.first,y1 = pa.second;PII pb = find(b);int x2 = pb.first,y2 = pb.second;if(x1 == x2)continue;if (op1 == "move"){clean(x1,y1);}if(op2 == "onto"){clean(x2,y2);}move(x1,y1,x2);}for (int i = 0;i<n;i++){cout << i << ":";for(int j = 0;j<p[i].size();j++){cout << " " << p[i][j]; }cout << endl;}}
相关文章:
备考蓝桥杯:顺序表相关算法题
目录 询问学号 寄包柜 移动0 颜色分类 合并两个有序数组 物品移动 询问学号 我们的思路:创建一个顺序表存储从1开始依次存放进入教室的学生学号,然后查询 #include <iostream> #include <vector> using namespace std; const int N 2…...
【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
视频演示: 基于STM32与QT的智慧粮仓环境监测与管理系统设计 目录: 目录 视频演示: 目录: 前言:...
Vue3 自定义hook
文章目录 Vue3 自定义hook概述用法 Vue3 自定义hook 概述 Vue3推荐利用Vue的组合式API函数进行代码封装,这种封装方式统称为自定义hook。 用法 定义 hook/countHook.js: import {computed, ref, watch} from "vue";export default (initC…...
【VBA】【EXCEL】将某列内容横向粘贴到指定行
Sub CopyRowToColumn()On Error GoTo ErrorHandler 添加错误处理Application.ScreenUpdating FalseApplication.Calculation xlCalculationManualApplication.EnableEvents False 禁用事件处理Dim lastCol As LongDim lastRow As LongDim i As Long, colCount As LongDim …...
使用Llama 3.1创建合成数据集以调优你的大型语言模型
使用Llama 3.1创建合成数据集以调优你的大型语言模型 在数据驱动的人工智能领域,数据是核心资产。开发高质量数据集既复杂又昂贵,因此很多实验室和开发者选择使用合成数据集。本文将介绍如何利用大型语言模型Llama 3.1 405B创建合成数据集,并…...
【Ubuntu22.04】VMware虚拟机硬盘扩容
1.首先打开虚拟机设置 2.根据需要对硬盘扩展 这边提示我们还需要进入虚拟机在内部分区 3.安装界面化磁盘管理工具 # 安装 sudo apt install gparted# 启动 sudo gparted调整硬盘大小 调整的时候会提示我们硬盘是只读的,因此还要进行操作 新建终端重新挂载文件系…...
初学stm32 --- DMA直接存储器
目录 DMA介绍 STM32F1 DMA框图 DMA处理过程 DMA通道 DMA优先级 DMA相关寄存器介绍 F1 DMA通道x配置寄存器(DMA_CCRx) DMA中断状态寄存器(DMA_ISR) DMA中断标志清除寄存器(DMA_IFCR) DMA通道x传输…...
reactor中的并发
1. reactor中的并发有两种方式 1.1 flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好. flamap有两个参数: int concurrency, int prefetch。分别代表并发的线程数和缓存大小 注意凡是参数中有prefetch的,都…...
HTML - <script>,<noscript>
<script>标签用于在网页插入脚本,<noscript>标签用于指定浏览器不支持脚本时的显示内容。 1.<script> <script>用于加载脚本代码,目前主要是加载 JavaScript 代码。 <script> console.log(hello world); </script&g…...
C#语言的函数实现
C#语言的函数实现 在现代编程语言中,函数(Function)是最基本也是最重要的组成部分之一。函数不仅提高了代码的复用性,还使得程序结构更清晰。C#作为一种多用途的编程语言,函数的知识是程序员必备的基本技能之一。本文…...
JAVA I/O流练习1
往D盘中的JAVA复习文件夹中写数据: 数据改了一下哈: import java.io.*; import java.util.Scanner; public class Test {public static void main(String[] args) throws IOException {String fileName"D:JAVA复习\\grade.txt";FileWriter w…...
HTML——75. 内联框架
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…...
js获取当前浏览器地址,ip,端口号等等
前言: js获取当前浏览器地址,ip,端口号等等 window.location属性查询 具体属性: 1、获取他的ip地址 window.location.hostname 2、获取他的端口号 window.location.port 3、获取他的全路径 window.location.origin 4、获取…...
C++虚函数(八股总结)
什么是虚函数 虚函数是在父类中定义的一种特殊类型的函数,允许子类重写该函数以适应其自身需求。虚函数的调用取决于对象的实际类型,而不是指针或引用类型。通过将函数声明为虚函数,可以使继承层次结构中的每个子类都能够使用其自己的实现&a…...
【每日学点鸿蒙知识】跳转三方地图、getStringSync性能、键盘避让模式等
1、跳转三方地图导航页 类似于Android 跳转到地图APP 导航页面: // 目标地点的经纬度和名称 double destinationLat 36.547901; double destinationLon 104.258354; String destinationName "目的地名称"; // 构建URI Uri uri Uri.parse("…...
【线性代数】通俗理解特征向量与特征值
这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。 文章目录 概念计算几何直观理解意义 概念 矩阵本身就是一个线性变换,对一个空间中的向量应用…...
C#设计模式(行为型模式):备忘录模式,时光倒流的魔法
C#设计模式:备忘录模式,时光倒流的魔法 在软件开发中,我们经常会遇到需要保存对象状态,并在未来某个时刻恢复的场景。例如: 撤销操作: 文本编辑器中的撤销功能,游戏中的回退操作。事务回滚&am…...
服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统
文章目录 引言I BIOS时间Windows查看BIOS版本安装日期linux查看BIOS时间II 操作系统安装日期LinuxWindowsIII MAC 地址IV 设备序列号Linux 查看主板信息知识扩展Linux常用命令引言 信息内容:重点信息:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统 Linux…...
用OpenCV实现UVC视频分屏
分屏 OpencvUVC代码验证后话 用OpenCV实现UVC摄像头的视频分屏。 Opencv opencv里有很多视频图像的处理功能。 UVC Usb 视频类,免驱动的。视频流格式有MJPG和YUY2。MJPG是RGB三色通道的。要对三通道进行分屏显示。 代码 import cv2 import numpy as np video …...
【C#学习】基类的静态变量 派生类会如何处理
来源GPT,仅记录学习 在C#中,子类继承父类的public static变量时,父类的静态变量对所有类(包括子类)都是共享的。子类并不会重新创建父类静态变量,而是共享父类的静态成员。 具体行为: 静态变量…...
Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具
1、目标 从库存栏中把道具拖到游戏场景中,库存栏中道具数相应做减法或者删除道具。同时在库存栏中可以交换两个道具的位置。 2、UIInventorySlot设置Raycast属性 在UIInventorySlot中,我们只希望最外层的UIInventorySlot响应Raycast,他下面…...
SQL进阶实战技巧:如何利用 Oracle SQL计算线性回归置信区间?
目录 1 置信区间计算方法 步骤1:计算回归系数 步骤2:计算标准误差 步骤3:计算置信区间 2 数据准备 <...
计算机网络——网络层—IP数据报与分片
一、IP 数据报的格式 • 一个 IP 数据报由首部和数据两部分组成。 • 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。 • 在首部的固定部分的后面是一些可选字段,其长度是可变的。 IP 数据报首部的固定部分中的各字段 版…...
高山旅游景区有效降低成本,无人机山下到山上物资吊运技术详解
在高山旅游景区,传统的物资运输方式往往面临人力成本高昂、效率低下等问题,而无人机技术的引入为这一难题提供了新的解决方案。以下是对无人机从山下到山上进行物资吊运技术的详细解析: 一、无人机物资吊运技术的优势 1. 降低人力成本&#…...
Linux 注册线程化的中断处理程序
1. 注册线程化中断处理函数 devmem_request_threaded_irq 是 Linux 内核中的一个函数,用于请求并注册一个线程化的中断处理程序。这个函数允许开发者注册一个中断处理函数,这个函数会在中断发生时被调用,从而实现相应的中断处理逻辑。它通过…...
【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
嘿,各位编程爱好者们!今天带来的 LIS 算法简直太赞啦 无论你是刚入门的小白,还是经验丰富的大神,都能从这里找到算法的奇妙之处哦!这里不仅有清晰易懂的 C 代码实现,还有超详细的算法讲解,让你轻…...
Linux: 关于 mount 的一些细节
文章目录 1. 前言2. mount 的主要细节 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. mount 的主要细节 mount 从系统调用 sys_mount() 发起,如 mount -t tmpfs cgroup /sys/fs/cg…...
CSS3——3. 书写格式二
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写:--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…...
Java-JVM详解
Java-JVM ①JVM概述 ❶基本介绍 JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点: Java 虚拟机基于二进制字节码执行,由一套字节码指…...
docker搭建atlassian-confluence:7.2.0
文章目录 引言I 部署前准备数据库镜像准备自己构建镜像dockerhub第三方镜像II 安装启动容器基础配置(获取服务器ID)授权码获取集群选择设置数据库配置管理员账号引言 准备数据库、镜像启动容器获取服务器ID根据服务器ID等信息,基于atlassian-agent.jar 授权I 部署前准备 数…...
YOLOv8实战人员跌倒检测
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对人员跌倒目标数据集进行训练和优化,该数据集包含丰富人员跌倒图像样…...
瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)
瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp) RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装 libdrmlibdrm-2.4.89 make 方式编译(cannot find -lcairo, 不推荐)下载源码编译编译错误: multiple definition of `nouveau debug‘错误cannot find -lcairo:…...
自动驾驶控制与规划——Project 6: A* Route Planning
目录 零、任务介绍一、算法原理1.1 A* Algorithm1.2 启发函数 二、代码实现三、结果分析四、效果展示4.1 Dijkstra距离4.2 Manhatten距离4.3 欧几里德距离4.4 对角距离 五、后记 零、任务介绍 carla-ros-bridge/src/ros-bridge/carla_shenlan_projects/carla_shenlan_a_star_p…...
wordpress报错open_basedir restriction in effect
Warning: file_exists(): open_basedir restriction in effect. File(/www/wwwroot/wp-content/plugins/woocommerce/patterns/banner.php) is not within the allowed path(s): 关闭防跨站攻击...
VSCode Live Server 插件安装和使用
VSCode Live Server是一个由Ritwick Dey开发的Visual Studio Code扩展插件,它提供了一个带有实时重载功能的本地开发服务器。在VSCode中安装和使用Live Server插件进行实时预览和调试Web应用程序。这将大大提高前端开发效率,使网页设计和开发变得更为流畅…...
网络安全-XSS跨站脚本攻击(基础篇)
漏洞扫描的原理 1.跨站脚本攻击介绍 xss跨站脚本攻击: xSS 全称(Cross site Scripting )跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻…...
【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析
【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析前言一.红黑树的定义1.1 红黑树的概念1.2红黑树的规则1.3 红黑树对比A…...
Mysql 性能优化:索引条件下推(ICP)
MySQL 索引下推(Index Condition Pushdown,ICP)是一种查询优化技术,旨在提高使用索引的查询效率。它是在 MySQL 5.6 中引入的,通过将部分 WHERE 子句的过滤条件下推到索引扫描阶段来减少不必要的回表操作,从…...
docker如何进入交互模式
目录 使用 docker run -it 使用 docker exec -it 示例: 使用 docker attach 示例: 在写代码的时候对小白来说避免不了本地和docker环境执行结果不一样的情况 这个时候需要进入正在运行的容器进行调试或执行一些命令操作。这时可以使用 Docker 提供的…...
闲谭SpringBoot--ShardingSphere分库分表探究
文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文,我们对日志表,进行了按月的分表,这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢,除了提高硬件性能,还有一…...
在Java中Semaphore的解释及主要用途
目录 定义 使用方法 主要用途 使用场景示例 定义 Semaphore(信号量)是Java并发编程中的一个同步工具类,用于控制对共享资源的访问。它通过维护一个计数器来管理多个线程对资源的并发访问数量。这个计数器表示当前可用的许可数,…...
React Native 项目 Error: EMFILE: too many open files, watch
硬件:MacBook Pro (Retina, 13-inch, Mid 2014) OS版本:MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹,最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web,出现如下错误:…...
四、VSCODE 使用GIT插件
VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git,就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …...
5 分布式ID
这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...
flink的EventTime和Watermark
时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念:ProcessTime、IngestionTime、EventTime。 ProcessTime:是在数据抵达算子产生的时间(Flink默认使用ProcessTime) IngestionT…...
T-SQL语言的函数实现
T-SQL语言的函数实现 在数据库管理系统中,函数是一种非常重要的编程结构。SQL Server支持多种类型的函数,包括标量函数、表值函数和系统函数。本文将详细介绍T-SQL中函数的实现,结合实际应用场景,帮助读者深入理解函数的使用方法…...
SpringBoot 使用 Cache 集成 Redis做缓存保姆教程
1. 项目背景 Spring Cache是Spring框架提供的一个缓存抽象层,它简化了缓存的使用和管理。Spring Cache默认使用服务器内存,并无法控制缓存时长,查找缓存中的数据比较麻烦。 因此Spring Cache支持将缓存数据集成到各种缓存中间件中。本文已常…...
Delphi+SQL Server实现的(GUI)户籍管理系统
1.项目简介 本项目是一个户籍管理系统,用于记录住户身份信息,提供新户登记(增加)、户籍变更(修改)、户籍注销(删除)、户籍查询、曾用名查询、迁户记录查询以及创建备份、删除备份共8…...
Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包
1. 引言 在获取了 Ungoogled Chromium 的源代码之后,我们需要安装所有必要的依赖包。这些依赖包对于成功编译 Chromium 至关重要。本文将指导您完成所有必需软件包的安装。 2. 依赖包安装 2.1 使用 Homebrew 安装基础依赖 # 安装 Ninja 构建系统 brew install n…...
开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法
在计算机视觉领域,目标检测是一项关键技术,旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位,但近年来,开放词汇检测(Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…...