【数据结构】链表OJ题(顺序表)(C语言实现)

请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

📝数据结构OJ题

  • ✏️移除元素
  • ✏️ 删除重复项
  • ✏️ 合并两个数组

✏️移除元素

在这里插入图片描述

题目链接:原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)
我在这里给大家提供了常规的三种解法,第一种解法是错误示范

解法一:大家首先肯定想到的是边遍历边删除,当然这也是常用的方法,但是实际上这个解法一是错误的

int removeElement(int* nums, int numsSize, int val)
{for (int i = 0; i < numsSize; i++){if (nums[i] == val){for (int j = i; j < numsSize - 1; j++){nums[j] = nums[j + 1];}numsSize--;}}for (int i = 0; i < numsSize; i++){if (nums[i] == val){for (int j = i; j < numsSize - 1; j++){nums[j] = nums[j + 1];}numsSize--;}}return numsSize;
}

大家可以看到在这里我用到了两次for循环进行遍历和删除而且是一模一样的,大家可以看下面的图:在这里插入图片描述
会出现两个相邻的数是一样的,如果你把前面的那个9去除了,那么后面那个9就会移到前面那个数的位置,而此时那个位置已经检查过了,所以第二个9就没发删除,就会遗留下来:
在这里插入图片描述
所以这里就采用两次循环就可以解决,但是问题来了,如果是三个相邻的数相同,是不是就得用三个for循环,那如果是四个,五个呢,所以该解法错误的原因在这里。当然你也可以先找到最多有几个相同并且相邻的数的次数,然后再用for循环当然这也可以,但是太复杂了,大家还是看看解法二。

解法二:该解法用了指针

int removeElement(int* nums, int numsSize, int val)
{int* ret = nums;//重新定义一个新的数组空间int sum = 0;while (numsSize){if (*nums != val){*ret++ = *nums++;   //把不同的数移到新的数组空间中sum++;                     //记录新数组的长度}else{nums++;}numsSize--;}return sum;
}

解法二是利用了指针,解法才变得简单起来。

解法三:用了两个变量

int removeElement(int* nums, int numsSize, int val) {int right = 0 ;int left  = 0 ;for (int i = 0; i < numsSize; i++){if (nums[i] != val){nums[left] = nums[right] ;left++;right++;}elseright++;}return left;
}

在这里也是利用两个变量相互移动及赋值,不过这种解法教于指针更容易理解。

✏️ 删除重复项

在这里插入图片描述

题目链接: 删除排序数组中的重复项

解法

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

在这里还是利用了两个变量来记录数组元素的变化及移动,和上一题的解法三还是挺类似的,不过还是有一点差别。因为上一题我们是先赋值再移动,而这一题我们是先移动再赋值。为什么第二题就要先移动再赋值呢,这是因为我们这里是要保留一个,删除重复的,而第一题是直接删除。

✏️ 合并两个数组

在这里插入图片描述

题目链接: 合并两个有序数组

解法

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

首先这一题无论是初始的两个数组还是后面合并的数组都是要求数据以递增的形式呈现。

在这里插入图片描述

上幅图中就是题目所给的两个有序数组和一些条件。
按照题目意思我们只能从后面把数据填进去,如果从前面会覆盖一些数据,造成数据丢失。

利用遍历来做,因为题目要求数据是递增的形式。所以只能利用遍历,一边遍历一边比大小。

在这里又要分两种情况:
第一种:n1还有剩余,m1已经分配完了,如下图所示

在这里插入图片描述

在这里插入图片描述
在这里m1是已经为0了,所以会跳出循环,然后直接把nums2中剩余的数补到nums1的前面就可以了。

第二种:m1还有剩余,n1已经分配完了,如下图所示

在这里插入图片描述
在这里插入图片描述
像这种情况就可以直接结束了。

知道这两种情况后,应该就能明白我们后面为什么会加一个循环,就是为了防止第一种情况的出现。

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

握这些员工管理技巧,助你打造高效团队!

人力资源是一个组织中至关重要的一环&#xff0c;而员工管理是确保团队高效运转的关键因素之一。一个优秀的经理需要具备多方面的技巧和能力&#xff0c;以便激发员工的潜力&#xff0c;促进合作和增加团队的效率。在这里&#xff0c;我将分享一些实用的员工管理技巧&#xff0…

Hadoop学习笔记(HDP)-Part.12 安装HDFS

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

RAR文件的密码保护如何设置和取消?

RAR文件是压缩包一种常用的压缩文件格式&#xff0c;对于这种文件&#xff0c;我们如何设置和取消密码保护呢&#xff1f; 首先我们要下载适用于RAR文件的WinRAR解压缩软件&#xff0c;然后在压缩文件的时候&#xff0c;就可以同步设置密码&#xff0c;选中需要压缩的文件&…

在外包公司干测试半年,提升的只有我的年龄···

有一说一&#xff0c;外包没有给很高的薪资&#xff0c;是真不能干呀&#xff01; 先说一下自己的情况&#xff0c;本科生&#xff0c;年初通过校招进入深圳某软件公司&#xff0c;干了接近半年的功能测试&#xff0c;直到最近遇到了瓶颈&#xff0c;感觉自己不能够在这样下去了…

分享5款小伙伴们推荐的好用软件

​ 转眼间2023年已经只剩下一个月了&#xff0c;最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.文件格式转换——Convertio ​ Convertio是一款在线文件格式转换软件&#xff0c;可以让用户在不同的文件格…

Python sorted函数及用法以及如何用json模块存储数据

Python sorted函数及用法 sorted() 函数与 reversed() 函数类似&#xff0c;该函数接收一个可迭代对象作为参数&#xff0c;返回一个对元素排序的列表。 在交互式解释器中测试该函数&#xff0c;可以看到如下运行过程&#xff1a; >>> a [20, 30, -1.2, 3.5, 90, 3.…

Linux系统---图书管理中的同步问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、问题描述 &#xff08;1&#xff09;图书馆阅览室最多能够容纳N&#xff08;N5&#xff09;名学生&#xff0c;若有更多学生想…

跨境代采怎么实现(代采网站)

中国代购作为一种新型的业务形式&#xff0c;此类服务能够帮助消费者购买来自全球的商品&#xff0c;同时也为商家提供了在线销售机会。代购行业的兴起&#xff0c;有助于打破传统的地域和跨境限制&#xff0c;促进了国际贸易和经济发展。 一、中国代购的定义和特点 代购可以被…

冬季吃得过饱?羊大师教你几招消食的小妙招!

冬季吃得过饱&#xff1f;羊大师教你几招消食的小妙招&#xff01; 冬季是人们容易吃得过饱的季节&#xff0c;美食诱惑频出&#xff0c;很容易导致胃口过大&#xff0c;饭量过多&#xff0c;造成消化不良甚至影响身体健康。所以&#xff0c;如何消食&#xff0c;让胃得到缓解…

long转int类型转换问题

在业务代码中排序时需要根据日期排序&#xff0c;写了如下代码 sorted((o1, o2) -> {String str1 null;String str2 null;try {Field field getField(fieldMap, configBO.getCodeName());str1 String.valueOf(field.get(o1));str2 String.valueOf(field.get(o2));} ca…

【Qt开发流程】之对象模型1:信号和槽

Qt对象模型 标准c对象模型为对象范型提供了非常有效的运行时支持。但是它的静态特性在某些问题领域是不灵活的。图形用户界面编程是一个既需要运行时效率又需要高度灵活性的领域。Qt通过结合c的速度和Qt对象模型的灵活性提供了这一点。 Qt将这些特性添加到c中: 一个非常强大的…

基于Go语言实现简易Web应用

目录 前言Go语言特点写在使用Go语言实现Web应用前面创建Web服务器声明一个结构体操作加入中间件的使用使用静态文件服务器最后 前言 在编程语言中&#xff0c;近几年问世的几个新语言都是非常不错的&#xff0c;比如Go、Python、 Rust等等。其中&#xff0c;Go语言(Golang)作…

CookieSession Redis 到JWT会话管理历史

单应用时期&#xff0c;通常使用 Cookies 和 Session 进行会话管理。 用户登录后&#xff0c;服务器创建一个唯一的会话标识符&#xff08;Session ID&#xff09;&#xff0c;将其存储在浏览器的 Cookies 中&#xff0c;并在服务端维护一个关联该标识符的会话对象。 这种方…

全国停车位收费标准接口API

1) 请求地址 接口地址https://psbg.jparking.cn/cw-gateway/cwzg/v1/near_park 2) 调用方式&#xff1a;HTTP post 3) 接口描述&#xff1a; 数据来源捷停车 不可用于商用 概不负责 4) 请求参数: {"latitude": "29.563009", //坐标"longitude&quo…

Verilog基础:编译指令`timescale

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 timescale编译指令用于指定指令后模块的时间单位和时间精度。时间单位是时间值的度量单位&#xff0c;例如延迟值和仿真时间&#xff1b;而仿真精度决定了最小可分…

集成测试如何做?

今天学习下如何进行集成测试。 什么是集成测试? 集成测试被定义为一种测试类型&#xff0c;其中软件模块在逻辑上集成并作为一个组进行测试。一个典型的软件项目由多个软件模块组成&#xff0c;由不同的程序员编码。此级别测试的目的是在集成这些软件模块时&#xff0c;暴露…

全网最新最全的Appium自动化:Appium常用操作之H5页面操作 --待补充!

手机chrome浏览器操作&#xff1a; 手机端chrome浏览器一般用于打开H5手机版网站&#xff0c;它的操作方式与PC端的浏览器操作&#xff08;即selenium对浏览器的操作&#xff09;是一模一样的&#xff0c;由于切换后的WebView页面也属于网页 下述的方法中部分支持在webview页面…

什么是JVM的内存模型?详细阐述Java中局部变量、常量、类名等信息在JVM中的存储位置

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、JVM基本介绍 二、JVM内存模型 2.0 概述 2.1 类加载子系统 2.2 运行时数据区 2.2.0 基本…

python中的输入输出

文章目录 输入函数input()例子1.如何输入获得两个字符串?&#xff08;若输入abc def或abc,def)2.如何输入获得两个整数?&#xff08;若输入34,567)3.如何输入后获得一个元素均为数值型的列表?&#xff08;若输入12,3.4,567或[12,3.4,567]&#xff09; 输出输出函数print()pr…

【上海大学《面向对象程序设计A》课程小项目报告】抽象向量类模板及其派生类

1 项目内容及要求 本项目通过设计一个抽象向量类模板&#xff0c;以及一个通用的向量类模板和一个字符串类作为其派生类&#xff0c;以满足各种应用场景中的数据存储和处理需求。 项目内容&#xff1a; 抽象向量类模板。派生向量类。派生字符串类。测试及异常处理。联合测试…