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

【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。  

前言:随着编程相关知识点的学习,我们LeetCode的刷题也不能落下。在前面我们也接触到了洛谷和牛客这两个刷题网站,但是博主一直都在推荐大家使用力扣,是因为力扣的判题严谨且大部分都是接口型题目,与面试中的笔试题也更加贴合。那么还是老样子,博主会为大家提供我自己的思路和代码,但是算法题的解法肯定不止一个,欢迎大家一起交流和讨论。


目录

1.数组串联

2.合并两个有序数组

3.删除有序数组中的重复项 


1.数组串联

题目链接: 1929. 数组串联 - 力扣(LeetCode)

题目描述: 

题目示例:

 思路:利用malloc开辟空间

解题过程:

1.先定义一个新数组,为它开辟空间,空间大小由题目可知申请为2*numsSize *sizeof(int);

2.我们先将原来数组中的元素放到新数组里,与此同时将原来数组中的元素再依次放入新数组变长后的部分 从下标i+numsSize开始。

具体解题过程图示如下:

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码演示: 

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* getConcatenation(int* nums, int numsSize, int* returnSize) {int*ans=(int*)malloc(sizeof(int)*numsSize*2);for(int i=0;i<numsSize;i++){ans[i]=nums[i];ans[i+numsSize]=nums[i];}*returnSize=2*numsSize;return ans;
}

2.合并两个有序数组

题目链接: 88. 合并两个有序数组 - 力扣(LeetCode)

题目描述:

题目示例:

 思路:双指针倒序原地合并

解题过程:

1.指针初始化,i指向num1前m个有效元素的末尾,j指向num2所有元素的末尾,k指向nums1合并后数组的末尾

2.从两个有序数组的末尾开始比较元素,将较大的元素先放入结果数组的末尾,结果数组其实就是合并后的num1

3.我们需要考虑到如果num1有效和num2中有一个提前结束了的情况

  • 如果是num1有效先结束,我们只需要把num2中剩下的元素直接继续放到结果数组中就行了
  • 如果是num2先结束,直接不用管了,nums1中参与合并的剩下的元素直接就放前面去了

具体解题过程图示如下:
 
复杂度: 

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

代码演示: 

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int i=m-1;int j=n-1;int k=m+n-1;while(i>=0&&j>=0){if(nums1[i]>nums2[j]){nums1[k--]=nums1[i--];}else{nums1[k--]=nums2[j--];}}//如果nums2先结束,不用讨论nums1中剩下的放前面就行了while(j>=0){nums1[k--]=nums2[j--];}
}

3.删除有序数组中的重复项 

题目链接:26. 删除有序数组中的重复项 - 力扣(LeetCode)

题目描述: 

题目示例: 

思路: 双指针

解题过程:

1.先抽象定义两个指针,实际上就是变量,dst=0,src=dst+1;

2.利用这两个指针,如果src的值等于dst的值,直接src++;如果src的值不等于dst的值,就先++dst再赋值,最后src++。这里需要注意一下当src与++dst指向同一个位置的时候就不需要赋值了,所有可以用&&把两个条件写在一起。

3.最后这里利用k记录下dst+1的值,也就是题目所需要的答案,直接返回就行了

具体解题过程图示如下: 

复杂度: 

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

代码演示: 

int removeDuplicates(int* nums, int numsSize) {int dst=0;int src=dst+1;while(src<numsSize){//当src的值等于dst的值时,src++//当src的值不等于dst的值时,先dst++,再赋值,src++if(nums[src]!=nums[dst]&&++dst!=src){nums[dst]=nums[src];}src++;}int k=dst+1;return k;
}

往期回顾: 

【数据结构初阶】--单链表(一)

【数据结构初阶】--单链表(二)

【LeetCode刷题指南特别篇】--移除链表元素,调试技巧,链表分割

结语:本篇文章就到此结束了,《LetetCode刷题指南》中的题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持

http://www.dtcms.com/a/284802.html

相关文章:

  • FreeBSD Conda Python3.12下安装GPT4Free(g4f)0.5.7.3版本
  • VR全景园区:开启智慧园区新时代
  • 2025年5大国产ETL工具横向评测
  • 【面板数据】上市公司股价同步性数据集-dta+xlsx(2000-2023年)
  • GX75C数字温度传感器可兼容TMP75C
  • 上标下标 | Unicode 符号
  • 微服务架构:从单体到分布式系统的演进与实践
  • 32位 DMIC 数据 其中高八位为符号位扩展位的理解
  • git merge-base查看某个分支从哪里拉出来的、主main分支上的某个时间之后某人的提交合并到特定分支(使用 cherry-pick 的场景)
  • 研发知识系统选型实战:从 Notion 到 Gitee Wiki 的迭代经验
  • Python中with的作用和用法
  • 前端之HTML学习
  • Python可迭代对象与迭代器详解 - 深入理解Python迭代机制
  • DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?
  • 【C语言】动态内存管理全解析:malloc、calloc、realloc与free的正确使用
  • AR技术赋能石化巡检:安全高效新引擎
  • linux-SSH
  • 2025年广东食品生产高级证考试题
  • Python特殊方法完全指南 | 掌握魔术方法提升编程能力
  • 性能监控(一)性能监控核心概念、核心指标
  • SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言!
  • 藏语识别技术:让古老智慧触手可及的AI突破
  • 前缀和题目:表现良好的最长时间段
  • 快慢指针的应用
  • 5种禁止用户复制的实用方案
  • C++网络编程 4.UDP套接字(socket)编程示例程序
  • UNISOC8850平台Log工具使用说明
  • 基于python和neo4j构建知识图谱医药问答系统
  • Cursor开发步骤
  • 大模型狂想曲:当AI学会“思考”,世界如何被重塑?