写在前面:
学完复杂度之后,算是正式进入到数据结构的学习。至此我们将首先了解顺序表的有关知识,包括增删查改等接口函数及其思想。顺序表其实就是数组,它要求数据在内存中必须是连续存储的。本文主要介绍力扣的三道顺序表的习题,这些习题主要利用双指针的思想来解决。
1.力扣第二十七题:移除元素 2.力扣第二十六题:删除重复元素 3.力扣第八十八题:合并两个有序数组
1.移除元素:
想法清楚了,写代码就不是什么难事了。代码如下:
int removeElement(int* nums, int numsSize, int val)
{
int src=0,dst=0;
while(src<numsSize)
{
if(nums[src]==val)
{
src++;
}
else
{
nums[dst]=nums[src];
dst++;
src++;
}
}
return dst;
}
2.删除重复元素(去重):
代码如下:
int removeDuplicates(int* nums, int numsSize)
{
int src=0,dst=0;
while(src<numsSize)
{
if(nums[src]==nums[dst])
{
src++;
}
else
{
dst++;
nums[dst]=nums[src];
src++;
}
}
return dst+1;
}
这里唯一要注意的就是返回值,dst只是数组的下标,而数组总元素的大小应该是下标加一。
3.合并两个有序数组:
代码也很简单:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int end1=m-1;
int end2 = n-1;
int i =m+n-1;
while(end1>=0&&end2>=0)
{
if(nums1[end1]>nums2[end2])
{
nums1[i--]=nums1[end1--];
}
else
{
nums1[i--]=nums2[end2--];
}
}
while(end2>=0)
{
nums1[i--]=nums2[end2--];
}
}
写在后面:
各个题目的思想解读我对放在图片中一起讨论了,因为我感觉这样会更好理解。博主的图也是有限的,所以这篇博客就不放图了,骚话也没想到,继续期待下一篇吧,说不定下一篇就有了。