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

数据结构与算法——顺序表之手撕OJ题

文章目录

  • 一、前言
  • 二、拿捏OJ题
    • 2.1移除元素
    • 2.2删除有序数组中的重复项
    • 2.3合并两个有序数组
  • 三、总结

一、前言

Do you study today?up在上一次已经讲解完毕了有关顺序表的所有知识,不知道大家是否已经沉淀完毕了呢?有一句老话说得好啊——光看不练假把式。没错,知识的积累就是建立在不断的练习之上,那么今天,up就给大家讲解几道用顺序表相关的OJ算法题,给大家趁热打铁。

二、拿捏OJ题

2.1移除元素

力扣27题移除元素链接
在这里插入图片描述
怎么样,在看完这道题之后,你是否已经有思路了呢?up也相信大家已经思绪万千了,up呢也有一个非常之NB的方法——双指针法。老规矩,up还是先给大家画图分析。
画图分析:
在这里插入图片描述
方法总结:定义两个变量下标都从0开始,让src往后遍历,而dest起一个站岗的作用。如果src为下标的元素不等于val,则赋值给下标为dest的元素,src++,dest++;如果src为下标的元素等于val,则src继续往后遍历,dest保持站岗不变,直到src遍历到数组最后一个元素跳出循环为止,最后dest的值就是不等于val的元素个数。
代码调试及展示:
`

//力扣27题,移除元素
int removeElement(int* nums, int numsSize, int val) {
    int dest = 0;
    int src = 0;
    while (src < numsSize) {
        if (nums[src] != val) {
            nums[dest++] = nums[src];
        }
        src++;
    }
    return dest;
}

2.2删除有序数组中的重复项

力扣26题删除有序数组中的重复项链接
在这里插入图片描述
刚刚我们讲完了移除元素,up相信大家肯定已经都听懂了,接着我们再来看这道题。可能有的宝子会问:“这道题和上面那道题看起来就是一个爹妈生的啊?我猜测还是可以用双指针法解决。”对此,我只能不得不说:猜得真准,哈哈哈。
画图分析:
在这里插入图片描述
方法总结:定义两个变量src和dest,dest初始为0,src初始为dest+1,src依次往后遍历,dest起站岗的作用,如果以src为下标的元素等于以dest为小标的元素,src++,dest不动;如果以src为下标的元素不等于以dest为下标的元素,先让dest++,在把以src为下标的元素的值赋给以dest为下标的元素,src++,直到跳出循环为止,最终dest+1的值就是数组唯一元素的个数。
代码调试及展示:
在这里插入图片描述

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

2.3合并两个有序数组

力扣88题合并两个有序数组链接
以上两道题是有关双指针法解决顺序表的题,现在我们来看最后一道OJ题。
在这里插入图片描述
画图展示:
在这里插入图片描述
在这里插入图片描述
方法总结:依次比较数组num1和数组num2中有效元素的最后一位,值大的元素则先放入num1数组中,从后往前依次遍历,当一个数组遍历完之后,剩下的数组中的剩余元素一定是有序的,在依次放入即可(如果剩余的是大的数组,则无需操作)。
代码测试及展示:
在这里插入图片描述

//力扣88题
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int l1 = m-1;
int l2 = n-1;
int l3 = m + n-1;
while (l1 >= 0 && l2 >= 0)
{
	if (nums1[l1] > nums2[l2])
	{
		nums1[l3--] = nums1[l1--];
	}else 
	{
		nums1[l3--] = nums2[l2--];
	}
}
while (l2 >= 0)
{
	nums1[l3--] = nums2[l2--];
}
}

三、总结

OK兄弟们,上面三道就是比较经典的顺序表的OJ题,我已经给大家分析完毕,up相信大家一定能把这些题消化完毕,玩弄于指尖和键盘之间。还是那句话:要想提升,得多练习。

练习是成功的关键,只有不断地练习,才能够获得更多的经验。
在这里插入图片描述

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

相关文章:

  • 在 Vue 项目中,登录成功后是否存储 token 与用户信息到本地
  • 【NTN 卫星通信】Starlink 星链卫星有多大?详解尺寸与技术参数
  • 深度学习Note.5(机器学习.6)
  • 神经网络检测题
  • FreeRTOS与RT-Thread内存分配对比分析
  • 多线程—JUC(java.util.concurrent)
  • 一个流程图的后续
  • DeepSeek接入飞书多维表格,效率起飞!
  • 【源码阅读/Vue Flask前后端】简历数据查询功能
  • chromem-go + ollama + bge-m3 进行文档向量嵌入和查询
  • 什么是数据集市
  • Redis 源码硬核解析系列专题 - 第二篇:核心数据结构之SDS(Simple Dynamic String)
  • 小程序某点餐平台全自动化实现思路
  • 虚拟现实--->unity学习
  • 动态规划入门:斐波那契模型四题详解(含空间优化技巧)
  • (二十)Dart 中的多态
  • AI基础02-图片数据采集
  • 红宝书第二十讲:详解JavaScript的Proxy与Reflect
  • 【自学笔记】Go语言基础知识点总览-持续更新
  • Sentinel 相关知识点
  • 【第34节】windows原理:PE文件的导出表和导入表
  • Linux 文件系统全解析
  • 202518 | Ngnix
  • MAUI开发Device.BeginInvokeOnMainThread使用
  • python专题1-----判断一个变量是否是字符串类型
  • 代码随想录算法训练营--打卡day4
  • windows第二十章 单文档应用程序
  • 基于大语言模型的智能音乐创作系统——从推荐到生成
  • Jenkins教程(自动化部署)
  • 纯个人整理,蓝桥杯使用的算法模板day1(dfs、bfs)