顺序表的经典算法OJ题

前言

hello,大家好呀,我是Humble,今天的博客内容是关于之前分享过的顺序表的力扣OJ题,毕竟我们学了顺序表的知识也要做一些算法题目来强化嘛

好的,废话不多说,直接开始吧~

顺序表的经典算法OJ题_第1张图片

题目一  

27. 移除元素 - 力扣(LeetCode)

题目描述:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度

顺序表的经典算法OJ题_第2张图片

这道题让我们写一个函数,返回移除val后数组nums的新长度

Humble的思路一是:遍历数组,遇到等于val的元素,将val的元素之后的元素往前覆盖

这是一个常规的想法,但它需要两个for循环,外循环用来遍历数组,内循环去往前覆盖

可以有点麻烦了

有没有什么方法可以只使用一次for循环,那么就看下面的思路二吧~

Humble的思路二是:双指针法

何为双指针法?  这里的指针不是真的定义指针,而是两个变量

我们定义两个变量 src  和 dst 作为下标

我们让src找不等于val的值 , 如果src指向的值等于val -->src ,src++

如果src 指向的值不等于val nums[dst] = nums[src],src++,dst++

代码如下:
 

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

    return dst; //循环结束后dst就是数组的新长度了~

}

结果:

顺序表的经典算法OJ题_第3张图片

题目二

88. 合并两个有序数组 - 力扣(LeetCode)

题目描述:

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列

注:nums1 的初始长度为 m + n

顺序表的经典算法OJ题_第4张图片

这道题让我们将nums2数组合并到nums1中,且合并后数组为非递减排列

值得注意的是:nums1与nums2本来就是各自为非递减排列的,我们要利用好这点

所以这里就不用将nums2直接放在nums1再重新排序这种比较暴力的解法了

综上考虑后,Humble得出的思路是:

定义3个变量 l1,l2,l3 作为下标

l1指向nums1的有效数据的末尾,l2指向nums2的有效数据末尾

l3则指向nums1的的末尾

然后,从两个数组的最后一个有效数据开始从后往前比较,找大,谁大就从nums1

数组的最后一个位置开始从后往前放

代码如下:
 

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)  //循环的结束条件要么是l1<0,要么是l2<0
       {
          if(nums1[l1] > nums2[l2]) 
               nums1[l3--] = nums1[l1--];
      
          else 
            nums1[l3--] = nums2[l2--];

       }
   
//特别注意:下面是一种特殊情况,要单独考虑
      while (l2>=0) //如果循环结束后是l1<0,l2>=0, 则要将nums2中剩余的元素放到nums1中
           nums1[l3--] = nums2[l2--];

}

运行结果如下:

顺序表的经典算法OJ题_第5张图片

结语

好了,今天关于顺序表的两道OJ题的分享就到这里了

在学习编程的道路上Humble与各位同行,加油吧各位!

最后希望大家点个免费的赞或者关注吧(感谢感谢),也欢迎大家订阅我的专栏

让我们在接下来的时间里一起成长,一起进步吧!

顺序表的经典算法OJ题_第6张图片

你可能感兴趣的:(C语言进阶之数据结构,c语言,开发语言,数据结构)