顺序表——leetcode

在这里插入图片描述
原地删除数据

在这里插入图片描述
我们的思路这里给的是双指针,给两个指针,从前往后移动,如果不是val就覆盖,如果是我就跳过,大家一定要看到我们的条件是原地修改,所以我们不能另开一个数组来实现我们这道题目。
在这里插入图片描述
这里我们给两个数组,一个是dst,一个就是我们的src,我们让src往后移动,遇到val就++,如果不是val我们就覆盖,大家也看到我们今天的主题是顺序表,说明我们的题目内容也最好和顺序表有点关系,顺序表的本质就是数组,所以我们这里还是用数组下标来访问可能更好,当然指针肯定也能实现。

int removeElement(int* nums, int numsSize, int val){
        int dst = 0;
        int src = 0;
        while(src < numsSize)
        {
            if(nums[src] != val)
            {
                nums[dst++] = nums[src++];
            }
            else
            {
                src++;
            }
        }
        return dst;
}

这样我们的代码就能通过,这里我们还需要做的就是返回这个数组的有效数据,这里我建议大家自己举例子来说明,我的想法是我们每次覆盖之后dst都会++,所以dst指向的位置应该是有效位置的后一个,因为我们的数组下标是从0开始的,所以还是dst,但是dst指向的是有效数据的后一位。

删除有效的数据的重复项
在这里插入图片描述

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

其实这里还是双指针的思路,如果相同我们就src++,不同的话我们先让dst++,然后再进行覆盖

在这里插入图片描述
其实大家自己去移动控制就可以算出来了,这里大家也可以让src从1开始,从1开始的话可能好比较一点,但是我们的思路是大差不差。

合并有序数组

在这里插入图片描述
首先我们看题目,可以想出两种做题的思路,第一种就是我们可以重新开辟一个空间,然后我们还是继续用双指针的办法,给两个指针指向我们nums1和nums2开始的地方,然后比较小,谁小谁先放入,一个到尾巴就结束,然后把剩下的放进去就可以了,但是我们这里看到数组1的空间其实足够大,那我们就不用考虑这么多,我们可以再nums1中进行操作。

在这里插入图片描述
我们比较谁大就放到后面去,然后有一个end变成0就得结束了,要不然会越界。


void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
        int end1 = m - 1;
        int end2 = n - 1;
        int tail = m + n -1;
        while(end1 >= 0 && end2 >= 0)
        {
            if(nums1[end1] > nums2[end2])
            {
                nums1[tail--] = nums1[end1--];
            }
            else
            {
                nums1[tail--] = nums2[end2--];
            }
        }
        while(end2 >= 0)
        {
            nums1[tail--] = nums2[end2--];
        }
}

在这里插入图片描述

10月底了,学校课真的好多,想旷课但是要点名,真的好烦,进度慢了好多了这个月,再加上手骨裂了,敲代码慢很多唉。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在冬天去看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值