数据结构OJ题

目录

  • 轮转数组
  • 原地移除数组中所有元素val
  • 删除有序数组中的重复项
  • 合并两个有序数组

轮转数组

在这里插入图片描述
思路1:
1.利用循环将最后一位数据放到临时变量(n)中
2.利用第二层循环将数据往后移一位
3.将变量(n)的数据放到数组第一位
时间复杂度:O(N^2)
空间复杂度:O(1)
思路2:
1.创建一个空间大小足够的数组
2.将数组按轮转的要求依次放入我们创建的数组里
3.再将新数组的内容依次存放的原数组中
时间复杂度:O(N)
空间复杂度:O(N)
这个思路就是利用空间来换时间了,随着计算机的发展,计算机的空间相比时间来说会廉价很多,必要情况下我们就可以选择使用空间来换取时间。
思路3:
1.将要轮转的元素首位调换
2.将不需要轮转的元素首位调换
3.将整个数组元素首位调换
时间复杂度:O(N)
空间复杂度:O(1)
具体流程如图所示:
在这里插入图片描述
很显然第三个思路是最好的,这里代码就只介绍思路3了。
代码实现:

void Swap(int* nums,int left,int right)
{while(left<right){int tmp=nums[left];nums[left]=nums[right];nums[right]=tmp;left++;right--;}
}
void rotate(int* nums, int numsSize, int k) {Swap(nums,0,numsSize-1-k);Swap(nums,numsSize-k,numsSize-1);Swap(nums,0,numsSize-1);
}

这个代码就完成了,但是在LeetCode提交出错了。
在这里插入图片描述
出错原因:只有一个数据但是他让我轮转两次。
解决办法:
在开始时让k模上一个数据个数。

void rotate(int* nums, int numsSize, int k) {k%=numsSize;Swap(nums,0,numsSize-1-k);Swap(nums,numsSize-k,numsSize-1);Swap(nums,0,numsSize-1);
}

题目链接: https://leetcode.cn/problems/rotate-array/submissions/567566749/

原地移除数组中所有元素val

要求:时间复杂度:O(N),空间复杂度:O(1)
在这里插入图片描述

案例:
在这里插入图片描述
思路:
1.定义两个变量left与right充当指针,都指向数组的第一个位置。
2.判断right当前的数据是否等于val
相等:right++
不相等:right指向的值赋值给left,right++,left++
3.返回left的数值就是当前数组有效数据的个数
left指向的时数组当前的位置,在它之前的数据都是有效的,因为下表是从0开始,所以数据个数就是最后一个数据的下表加一,推理得left值就是有效数据个数。
代码实现:

int removeElement(int* nums, int numsSize, int val) {int left=0;int right =0;while(right<numsSize){if(nums[right]==val){right++;}else{nums[left++]=nums[right++];}}return left;
}

题目链接:https://leetcode.cn/problems/remove-element/description/

删除有序数组中的重复项

在这里插入图片描述
案例:
在这里插入图片描述
思路:
1.定义两个变量left与right,一个指向下表0的位置,一个指向下表1的位置
2.判断left与right所指元素是否相等
相等:right++;
不相等:left++,right的值赋值给left,right++
3.返回left的值
代码实现:

int removeDuplicates(int* nums, int numsSize) {int left=0;int right =1;while(right<numsSize){if(nums[left]!=nums[right]){left++;nums[left]=nums[right];}right++;}return left+1;}

题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

合并两个有序数组

在这里插入图片描述
案例:
在这里插入图片描述
思路:
注意这里得题目要求,它的第一个数组的大小是第一个数组数据个数与第二个数组的数据个数之和,也就是它的大小可以刚好容纳两个数组的全部数据。
1.创建三个变量r,r1,r2
r指向第一个数组最后一个位置
r1指向数组1最后一个有效数据
r2指向数组2最后一个有效数据
2.比较两个数组最后一个有效数据大小
r1>r2:r1指向的数据放入r的空间,r1–;
r2>r1:r2指向的数据放入r的空间,r2–;
相等的话上面两个随便选一个方案即可
3.判断r2是否小于0
r2小于0,说明数组2的数据已经全部转移完,这个时候排序就完成了
r2>0,让数组2的剩余的没有比较的数据再依次放入数组1
代码实现:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int r1 = (m - 1);int r2 = (n - 1);int r = m + n - 1;while ((r1 >= 0) &&( r2 >= 0)){if (nums1[r1] >= nums2[r2]){nums1[r] = nums1[r1];r1--;}else{nums1[r] = nums2[r2];r2--;}r--;}while (r2 >= 0){nums1[r--]=nums2[r2--];}
}

题目链接:https://leetcode.cn/problems/merge-sorted-array/

---------------------------------------------------分割符
以上算法题可以通过画图来帮助自己理解,画图也更方便自己理解解题思路。
有更优算法可以在评论区交流分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12555.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Pencils Protocol 推出新板块 Auction ,为什么重要且被看好?

Pencils Protocol 上线了又一新产品板块 Auction&#xff0c;预示着生态版图的进一步完善&#xff0c;该板块的推出无论是对于 Pencils Protocol 协议本身&#xff0c;还是 Scroll 生态都是极为重要的。 社区正在成为主导加密市场发展的重要力量 自 DeFi Summer 以来&#xf…

Pytorch学习--神经网络--完整的模型训练套路

一、下载数据集 train_data torchvision.datasets.CIFAR10(root"datasets",trainTrue,transformtorchvision.transforms.ToTensor(),downloadTrue) train_data torchvision.datasets.CIFAR10(root"datasets",trainFalse,transformtorchvision.transform…

常用数字器件的描述-组合逻辑器件

目录 基本逻辑门 编码器 译码器 数据选择器 数值比较器 三态缓冲器 奇偶校验器 组合逻辑器件有逻辑门、编码器与译码器、数据选择器和数值比较器、加法器、三态器件和奇偶校验器等多种类型。 基本逻辑门 Verilog HDL中定义了实现七种逻辑关系的基元&#xff0c;例化这些…

在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能

在Django中可以使用CKEditor4和CKEditor5两个版本&#xff0c;分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4&#xff0c;python manager.py makemigrations时总是提示CKEditor4有安全风险&#xff0c;建议升级到CKEditor5。故卸载了CKEditor4&…

高效视觉方案:AR1335与i.MX8MP的完美结合

方案采用NXP i.MX8MP处理器和onsemi AR1335图像传感器&#xff0c;i.MX8MP集成四核Cortex-A53、NPU及双ISP技术。AR1335是一颗分辨率为13M的CMOS传感器。它使用了先进的BSI技术&#xff0c;提供了超高的分辨率和出色的低光性能&#xff0c;非常适合于需要高质量图像的应用。此外…

STM32软件SPI驱动BMP280(OLED显示)

STM32软件SPI驱动BMP280 OLED显示 BMP280简介寄存器简要说明SPI通讯代码逻辑代码展示 现象总结 BMP280简介 数字接口类型&#xff1a;IIC&#xff08;从模式3.4MHz&#xff09;或SPI&#xff08;3线或4线制从模式10MHz&#xff09; 气压测量范围&#xff1a;300&#xff5e;11…

基于Servlet实现MVC

目录 1.MVC相关概念 核心思想&#xff1a; 主要作用&#xff1a; 2.基于Servlet实现MVC 组成部分&#xff1a; 案例 实验步骤&#xff1a; 新建maven项目SpringMvcDemo 删除src目录并添加子模块MvcServlet ​编辑 导入相关依赖&#xff1a; 编写servlet 注册S…

剪辑师必备50多种擦拭转场/光效过渡效果Premiere Pro模板素材

项目特点&#xff1a; Premiere Pro的擦拭转场和光效闪烁过渡效果 Premiere Pro 2023及更高版本 适用于任何FPS和分辨率的照片和视频 易于使用 包含视频教程 无需插件 拖放方法 高品质 提高视频剪辑效率&#xff0c;节省时间&#xff0c;为视频创作添加独特且专业的转场风格。 …

数字化转型的架构蓝图构建指南:从理论到实践的系统实施路径

企业数字化转型的挑战与架构蓝图的重要性 在数字化浪潮的推动下&#xff0c;企业面临着前所未有的转型压力。传统业务模式和运营流程逐渐被更具弹性和敏捷性的数字化模式所取代&#xff0c;而企业架构蓝图作为战略转型的“导航仪”&#xff0c;能够为企业指明方向。企业架构治…

24.11.10

星期一&#xff1a; 补 23ICPC 合肥 G cf传送门 思路&#xff1a;由使第 k个最大这种条件易联想到二分&#xff0c;但是如何check是个问题 check使用dp&#xff0c;先想到个比较朴素的状态设定&#xff0c;dp【i】【j】…

Ubuntu 的 ROS 操作系统turtlebot3环境搭建

引言 本文介绍如何在Ubuntu系统中为TurtleBot3配置ROS环境&#xff0c;包括安装和配置ROS Noetic的步骤&#xff0c;为PC端控制TurtleBot3提供操作指南。 安装和配置的过程分为PC设置、系统安装、依赖安装等部分&#xff0c;并在最后进行网络配置&#xff0c;确保PC端能够顺利…

《深度学习图像分割》第3章:图像分割关键技术组件

《深度学习图像分割》这本书写写停停&#xff0c;历经三年多&#xff0c;目前在二稿修订中。正式出版之前&#xff0c;计划先在GitHub做逐步的内容和代码开源。 以下为本书第3章节选内容&#xff1a; 近年来&#xff0c;基于深度学习的图像分割技术发展迅猛&#xff0c;涌现出大…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-20

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

【论文复现】ChatGPT多模态命名实体识别

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ChatGPT ChatGPT辅助细化知识增强&#xff01;1. 研究背景2. 模型结构和代码3. 任务流程第一阶段&#xff1a;辅助精炼知识启发式生成第二阶段…

【拉箱子——模拟+DFS】

题目 代码 #include <bits/stdc.h> using namespace std; map<vector<vector<int>>, int> check; vector<vector<int>> mp; int n, m, ans; int dx[] {1, -1, 0, 0}; int dy[] {0, 0, 1, -1}; void dfs(vector<vector<int>>…

2024 年 Postman 进行 Websocket 接口测试的图文教程

Postman 进行 Websocket 接口测试的图文教程

绘制地理空间矢量场

用 Folium 绘制地理空间矢量场 地学和许多应用领域中&#xff0c;数据的视觉化非常重要。尤其是一些表示方向和速度的矢量数据&#xff0c;例如风速、海流、车速等&#xff0c;使用矢量图进行绘制能够更加直观地表达这些数据的特性。 示例数据集选择 为了便于说明矢量场的绘…

深度伪造检测(Deepfake Detection):识别真假影像的关键技术

随着人工智能技术的进步&#xff0c;深度伪造&#xff08;Deepfake&#xff09;技术迅速发展。深度伪造利用深度学习技术生成高仿真的人脸、声音、影像&#xff0c;使得虚假内容可以几乎以假乱真。这一技术最早用于娱乐和广告领域&#xff0c;但逐渐被不良分子用于制造虚假信息…

基于SSD模型的高压输电线障碍物检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于SSD模型的高压输电线障碍物检测系统&#xff0c;支持图像、视频和摄像实时检测【python源码、pytorch框架】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于SSD模型的高压输电线障碍物…

大数据技术与应用专业教学体系如何无缝对接职业技能需求

针对高职院校大数据技术应用专业人才培养与行业需求对接中存在的岗位适应性不足等问题&#xff0c;结合教育部职业技能等级证书要求&#xff0c;本文深入分析了高职院校人才培养对接职业技能等级证书标准的必要性和可行性&#xff0c;并探索了面向岗位职业技能的专业课程体系重…