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

顺序表相关的算法题

顺序表相关的算法题

  • 1、移除元素
  • 2、删除重复项
  • 3、合并两个有序序列

1、移除元素

移除元素的链接
在这里插入图片描述
在这里插入图片描述

这里,我们使用双指针法

  1. 定义两个指针dest src,同时指向数组的首元素
  2. src向前走,还未跳出数组时:
    • 如果遇到非val值,nums[src]赋值给nums[dest]dest向前跳过一个元素,src再向前跳过一个元素
    • 如果遇到valsrc直接向前跳过一个元素
  3. src跳出数组时,结束,返回dest

在这里插入图片描述

代码演示:

int removeElement(int* nums, int numsSize, int val) {int dest, src;//   数组     数组元素个数    被删除的数dest = src = 0;while (src < numsSize){if (nums[src] != val){nums[dest++] = nums[src++];}else if (nums[src] == val){src++;}}return dest;
}

2、删除重复项

删除重复项的链接
在这里插入图片描述
在这里插入图片描述
这里我们还是使用双指针法,不过,思路不太一样:

  1. 定义两个指针dest src
    • dest指向数组首元素。
    • src指向数组首元素的下一个元素
  2. src向前走,还未跳出数组时:
    • 如果nums[src]nums[dest]不相等时:
      • dest向前跳过一个元素
      • nums[src]赋值给nums[dest]
      • src向前跳过一个元素
    • 当然,如果dest就在src的前面,即dest + 1 == src(就出现了nums[src]nums[dest]不相等),这种情况下,可以使用下面情况的处理方法:
    • 如果nums[src]nums[dest]相等时,src直接跳过一个元素
  3. 注意,此时,返回dest + 1

图示:
在这里插入图片描述
代码演示:

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

3、合并两个有序序列

合并两个有序序列的链接
在这里插入图片描述
在这里插入图片描述
在这里,我们知道,nums1的长度nums1Size == m + n。那么,我们不妨反着来

  1. 定义三个指针:
    • p1:用于遍历数组nums1,指向的是nums1有效末元素
    • p2:用于遍历数组nums2,指向的是nums2有效末元素
    • p3:用于存储数据,指向的是nums1的末尾
  2. p1p2遍历:
    • 如果nums1[p1]nums2[p2]大,nums1[p1]赋值给nums1[p3],然后p1++ p3++
    • 如果nums2[p2]nums1[p1]大,nums2[p2]赋值给nums1[p3],然后p2++ p3++
  3. 跳出该遍历循环,依然有两种情况:
    • 如果p2遍历完,说明p1还有数,不用再进行任何操作。
    • 如果p1遍历完,说明p1还有数,此时,将nums2中剩下的数,依次放到nums1中即可。

代码演示:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int p1 = m - 1;int p2 = n - 1;int p3 = nums1Size - 1;while (p1 >= 0 && p2 >= 0){if (nums1[p1] >= nums2[p2]){nums1[p3--] = nums1[p1--];}else{nums1[p3--] = nums2[p2--];}}while (p2 >= 0){nums1[p3--] = nums2[p2--];}
}
http://www.dtcms.com/a/561608.html

相关文章:

  • 网站建设费用的请示福建省建设局实名制网站
  • 金华兰溪网站建设百度推广是什么
  • 【SpringBoot】配置文件
  • wordpress 文章链接关键词营销优化
  • AI工具导航网站收录了25款精选AI办公工具
  • 端口隔离技术的实验与验证(eNSP)
  • EF Core 中手动配置表名、主键、外键、索引、关系等映射
  • 做洁净的网站怎么利用源码做网站
  • 《高性能MySQL》第6讲:查询性能优化
  • 东台建设网站的公司天津建筑工程信息平台
  • “自然搞懂”深度学习(基于Pytorch架构)——010203
  • GitHub上Transformers项目中推理函数pipeline的使用
  • 笔记本电脑都挺好,但为啥总是卡顿?如何释放笔记本性能?
  • 邯郸有建网站的吗企业管理咨询是做什么的
  • 网站的页头页脚怎么做贵阳网站建设推广公司
  • 【Java Stream 和 Collection 的真正区别】
  • 数据开发到数据中台又到数据治理
  • 网站 网页区别是什么淘宝网站建设素材
  • ubuntu系统找不懂nvidia-smi,更新驱动更没有,找不到网卡,很难,但是解决了,睡一觉我的ubuntu系统坏了(推荐二)
  • 曲阜市古建设计院网站阜宁网页设计
  • 从零到一:打造现代化全栈个人博客系统
  • Windows 安装 WSL 并集成 Docker
  • LVS-DR模式配置
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十六)集群部署模块——LVS-DRTUN模式配置
  • 济南网站建设网站最新域名解析网站
  • LVS-NAT、DR、TUN模式配置
  • Qt样式深度解析
  • 怎么用自己电脑做网站优化一个网站
  • 莱芜做网站优化溧阳建设集团有限公司网站
  • id创建网站徐州品牌网站建设