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

发布于:2025-03-30 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、前言

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相信大家一定能把这些题消化完毕,玩弄于指尖和键盘之间。还是那句话:要想提升,得多练习。

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


网站公告

今日签到

点亮在社区的每一天
去签到