顺序表在线OJ题(详解+图解)

简介: 顺序表在线OJ题(详解+图解)
1:原地移除数组中所有的元素val(时间复杂度为O(N)空间复杂度为O(1))

题目的大概意思是:用户自行输入一个数组,还要输入一个val的整形值,然后从数组中移除等于val的元素

我们根据题目的要求,时间复杂度为O(N)空间复杂度为O(1)

可以用以下的办法:

用一个for循环将数组遍历,再用if语句进行判断,如果不等于val的值,我们就将这个元素放入数组中,如果等于val的话i就继续+1,不放入数组中

代码实现如下:

int removeElement(int* nums, int numsSize, int val)
{
    int i = 0;
    int pos = 0;
    int ret=0;
    for (i = 0; i < numsSize; i++)
    {
        if (nums[i] != val)
        {
            nums[pos] = nums[i];
            pos++;
            ret++;
        }
    }
    return ret;
}
2:删除排序数组中的重复项

题目的要求是删除数组中的重复项,使其只出现一次,然后返回整个数组,并按照它们最初在 nums 中出现的顺序排列,并且输出数组的大小

这题我们可以使用双指针的思路来解决:

用while循环遍历,如果nums[src]!=nums[dst],nums[1](也就是nums[++dst])就等于nums[src],然后dst和src依次++,如果nums[src]=nums[dst]的话,src就直接++,dst不用++

代码实现如下:

int removeDuplicates(int* num, int numsSize)
{
    int src = 1;
    int dst = 0;
    while (src < numsSize)
    {
        if (num[src] != num[dst])
        {
            num[++dst] = num[src++];
        }
        else
            src++;
    }
    return dst + 1;//返回数组的大小
}
3:合并两个有序数组

本题是将两个有序的数组最后合并为一个有序数组,然后返回,我们可以先将数组nums2放入nums1中,然后再将nums1进行一次排序,然后返回nums1

代码实现如下:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
//直接用qsort排序
    //int i = 0;
    //int pos = 0;
    //for (i = 0; i < n; i++)
    //{
    //    nums1[m + i] = nums2[pos++];
    //}
    //qsort(nums1, nums1Size, sizeof(int), cmp);
    //这种方法也比较简单,是将两个数组中末位的元素进行比较
    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--];
    }
}
4:旋转数组

这个题目算是很简单的,在我之前的文章中也讲解过,所以这里不做过多的解释了

代码如下:

大致的思路就是先将前k个元素旋转,然后旋转后一部分,然后再整体旋转

void swap(int* a, int* b)
{
    int t = *a;
    *a = *b, *b = t;
}
void reverse(int* nums, int start, int end) 
{
    while (start < end) 
    {
        swap(&nums[start], &nums[end]);
        start += 1;
        end -= 1;
    }
}
void rotate(int* nums, int numsSize, int k) 
{
    k %= numsSize;
    if( k ==0 || numsSize == 1)
    {
        return;
    }
    
    //交换高到低
    reverse(nums, 0, k - 1);
    //交换低到高
    reverse(nums, k, numsSize - 1);
     //交换全部
    reverse(nums, 0, numsSize - 1);
}
5:数组形式的整数加法

本题的思路如下:

我们的函数参数有num数组,就是我们输入的数组,numsize是num数组的元素个数,k是加上去的值,returnsize是最后加上k后的数组

思考后我们就可以得出以下思路:

代码如下:

int* addToArrayForm(int* num, int numSize, int k, int* returnSize)
{
    int i=0;
    int sum=0;
    int x=pow(10,numSize-1);
    for(i=0;i<numSize;i++)
    {
        sum+=num[i]*x;
        x=x/10;
    }
    int SUM=sum+k;
    int count=0;
    while(SUM)
    {
        count++;
        SUM/=10;
    }
    int y=pow(10,count-1);
    for(i=0;i<count;i++)
    {
        returnSize[i]=(sum+k)/y;
        y/=10;
    }
    return returnSize;
}

好了,今天的分享到这里就结束了,感谢大家的支持!

相关文章
|
小程序 数据安全/隐私保护 Android开发
八米云-N1盒子、机顶盒等设备-小白保姆式超详细刷机教程
这里以魔百盒CM211-1为例,本次刷机用到的零碎工具比较多,不过都是常见刚需设备,大家可以按照清单核对一下。 目前只支持S905 L3、L3a、L2 系列的各种盒子
2943 1
八米云-N1盒子、机顶盒等设备-小白保姆式超详细刷机教程
|
缓存 监控 NoSQL
Redis - 在电商购物车场景下的实战分析
Redis - 在电商购物车场景下的实战分析
1449 0
|
应用服务中间件 PHP nginx
phpstorm开启debug断点调试模式
phpstorm开启debug断点调试模式
786 2
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
缓存 安全 数据安全/隐私保护
「小邓观点」分享几种常见的账户锁定原因
下期小邓将与大家分享账户锁定的解决方案。如果您有账户锁定方面的困扰,敬请期待!
2233 4
|
人工智能 前端开发
阿里通义千问宣布免费开放1000万字长文档处理功能
阿里通义千问宣布免费开放1000万字长文档处理功能,助力专业人士高效处理信息,引领AI在长文本处理领域的进步。虽然在处理文档前端内容时有待优化,但该功能对企业构建内部知识库和提供智能客户服务具有广阔应用前景,标志着AI技术的又一里程碑。
1871 3
阿里通义千问宣布免费开放1000万字长文档处理功能
|
人工智能 搜索推荐
强大的AI搜索引擎——秘塔AI搜索
【2月更文挑战第17天】强大的AI搜索引擎——秘塔AI搜索
5771 2
强大的AI搜索引擎——秘塔AI搜索
|
计算机视觉
限制对比度自适应直方图均衡化
【6月更文挑战第12天】限制对比度自适应直方图均衡化。
669 1
|
消息中间件 NoSQL Java
订单超时取消的11种方法(上)
大家好,我是三友~~ 延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式,这些方式并没有绝对的好坏之分,只是适用场景
订单超时取消的11种方法(上)
|
人工智能 自然语言处理 数据处理
【AI大模型】Transformers大模型库(十三):Datasets库
【AI大模型】Transformers大模型库(十三):Datasets库
1171 0

热门文章

最新文章