顺序表算法题【不一样的解法!】

本章概述

算法题1

力扣:移除元素

我们先来看这个题目的要求描述:

把与val相同数值的元素移除掉,忽略元素的相对位置变化,然后返回剩下与val值不同的元素个数。来看下它给的例子描述:

  • 题解:我们可以运用顺序表删除指定数据的思路来进行解题,我们可以定义双变量,用这两个变量去遍历数组元素,然后通过移动数组元素来移除指定元素。逻辑图展示:
  • 进行代码展示:
javascript 复制代码
int removeElement(int* nums, int numsSize, int val) {
    int src = 0;
    int dst = 0;
    while (src < numsSize) {
        if (nums[src] == val)
            src++;
        else {
            nums[dst] = nums[src];
            src++;
            dst++;
        }
    }
    return dst;
}

结果运行图:

算法题2

力扣:删除有序数组中的重复项

我们来看下这个题目的描述:

这个数组不是严格意义上的递增数组,要求把重复的元素给删掉,而且各个元素的相对位置不变化,最后返回不重复的元素个数。来看一下它给的例子:

  • 题解:大体的思路和上一个算法题类似,也是需要两个变量进行遍历数组。在这里直接给大家展示代码:
javascript 复制代码
int removeDuplicates(int* nums, int numsSize) {
    int src = 0;
    int dst = 0;
    while (src < numsSize) {
        if (nums[dst] == nums[src])
            src++;
        else {
            dst++;
            nums[dst] = nums[src];
            src++;
        }
    }
    return dst + 1;
}

结果运行图:

算法题3

力扣:合并两个有序数组

我们来看一下题目的描述:

  • 题解:nums1数组的有效数据个数为m个,nums2数组的有效数据个数为n个。我们要把ums2的元素插入nums1数组里面,那么nums1的数组大小要为m+n,才能保证能插入进去(题目描述的nums2大小为m+n),而且插进去后,还要是增序的顺序。来看题目举得例子:

    • 方法1:我们先把nums2插入nums1里面,然后用冒泡排序进行nums1内部排序。
    • 方法2:我们直接进行两个数组里面的元素大小比较,把大的元素放在nums1最后面,我们需要定义3个变量,l1 ,l2 和 l3。l1和l2进行比较大小,l3是用来存放较大的元素。进行逻辑图展示:
      进行代码展示:
javascript 复制代码
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)  //防止l1<0时,l2里面得元素还没,还没全放进nums1
    {
        nums1[l3--]=nums2[l2--];
    }
}

结果运行图:

彩蛋时刻!!!

歌曲:《Call of Silence》

每章一句:人生漫长,祝你每天都快快乐乐!感谢你能看到这里,点赞+关注+收藏+转发是对我最大的鼓励,咱们下期见!!!

相关推荐
地平线开发者12 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮12 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者13 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考13 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx16 小时前
CART决策树基本原理
算法·机器学习
Wect17 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱17 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript