首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >顺序表经典算法OJ题(移除数组,合并俩个有序数组)

顺序表经典算法OJ题(移除数组,合并俩个有序数组)

作者头像
迷迭所归处
发布2024-11-19 17:01:37
发布2024-11-19 17:01:37
11300
代码可运行
举报
文章被收录于专栏:动态规划动态规划
运行总次数:0
代码可运行

1.移除数组

 思路1:创建新的数组,遍历原数组,将不为val的值放到新数组中

但是题目中有一个限制,所以这个思路不通过

思路2:双指针法

创建俩个变量src,dest

1.如果src指向的值为val,则src++

2.如果src指向的值不为val,则把src指向的值赋给dest(nums[dest]=nums[src]),赋完值之后src++,dest++

代码语言:javascript
代码运行次数:0
运行
复制
int removeElement(int* nums, int numsSize, int val) 
{
    //创建俩个变量指向数组的起始地址
    int src,dest;
    //都指向下标为0的位置
    src = dest = 0;
    //numsSize:数组的长度
    while(src < numsSize)
    {
        //如果src指向的是val
        if(nums[src] == val)
        {
            src++;
        }
        //如果src指向的不是val,则src和dest先赋值再++
        else
        {
            (nums[dest]=nums[src]);
            src++;
            dest++;
        }
        
    }   
    //这个时候dest的长度就是有效长度
        return dest;
}

2.合并俩个有序数组

思路1:将num2中的数据依次放到num1中,按照排序算法进行排序 

第一种情况:l2先出循环

为了防止数据的覆盖,所以是从后往前比大小:大的放在后面

第二种情况:l1先出循环,num2中还有数据为放到num1中

代码语言:javascript
代码运行次数:0
运行
复制
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
   //nums1Size:num1数组的长度 nums2Size:num2数组的长度
   int l1 = m-1;
   int l2 = n-1;
   //有效数组m+n再-1的下标
   int l3 = m+n-1;
   //下标>=0才能有效的进行循环
   while(l1 >= 0 && l2 >= 0)
   {
     if(nums1[l1] < nums2[l2])
       {
         //如果l1指向的值小于l2指向的值,那么就把l2指向的值赋给l3,再同时--
         nums1[l3--]=nums2[l2--];
       }
     else
       {
         nums1[l3--]=nums1[l1--];        
       }
   }
   //只需要处理一种情况,那就是l2>=0,也就是l2中的数据还没有完全放到nums1中
    while(l2>=0)
   {
        nums1[l3--]=nums2[l2--];
   }
}

如果l2>=0,那么就是l2中的数据还没有完全放到nums1中

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档