每日一题——移除元素

简介: 每日一题——移除元素

移除元素

题目链接

思路

  • 题目没有规定时间复杂度,那么我们最容易想到的方法肯定是利用两层for循环来解决问题
  • 即遍历数组,如果数组元素等于val,那就将这个元素后面的元素往前移,将这个值为val的元素覆盖
  • 这样的暴力解法的时间复杂度为O(n2)
  • 那这题可不可以缩短时间,使时间复杂度为O(n)呢?当然可以,这里我们就需要用到双指针中的快慢指针思想
  • 定义快指针fast,用来遍历整个数组,慢指针slow用来确定新数组(即删除值为val元素后·数组)的下标,并都初始化为0
  • 当nums[fast]不为val时,那就使nums[slow]的值为nums[fast],同时slow++,相当于保留数组元素
  • 当nums[fast]等于val时,那就使fast继续遍历,而slow不变,相当于删除了值为val的元素

实现代码

方法一

int removeElement(int* nums, int numsSize, int val){
    int i,j;
    for(i=0;i<numsSize;i++)
    {
        if(nums[i] == val)
        {
            for(j=i+1;j<numsSize;j++)
                nums[j-1] = nums[j];
            numsSize--; //数组大小减一
            i--;  //由于后面的元素往前覆盖了一个位置,因此i要向前走一个
        }
    }
    return numsSize;
}

方法二(快慢指针

int removeElement(int* nums, int numsSize, int val){
    int fast,slow = 0;
    for(fast = 0; fast < numsSize; fast++)
    {
        if(nums[fast] != val)
            nums[slow++] = nums[fast];
    }
    return slow;
}

ps:快慢指针的动态图来自《代码随想录》——https://programmercarl.com/


相关文章
|
机器学习/深度学习 人工智能 算法
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
425 0
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【8月更文挑战第1天】在当今科技飞速发展的时代,AI已成为日常生活中不可或缺的一部分。神经网络作为AI的核心,通过模拟人脑中的神经元连接方式处理复杂数据模式。利用Python及其强大的库TensorFlow,我们可以轻松构建神经网络模型。示例代码展示了如何建立一个含有两层隐藏层的简单神经网络,用于分类任务。神经网络通过反向传播算法不断优化权重和偏置,从而提高预测准确性。随着技术的进步,神经网络正变得越来越深、越来越复杂,能够应对更加艰巨的挑战,推动着AI领域向前发展。
140 2
|
存储 缓存 JSON
Go Modules:Go语言依赖管理的新篇章
Go Modules是Go 1.11引入的依赖管理标准,解决`GOPATH`的依赖冲突问题。
294 1
|
存储 弹性计算 运维
阿里云轻量应用服务器与标准型阿里云服务器ECS全面对比(配置、价格)
随着云计算技术的蓬勃发展,阿里云作为业界的佼佼者,推出了多样化的云服务器产品以满足不同用户群体的需求。在这些产品中,阿里云轻量应用服务器与标准云服务器(ECS)因其各自的特点而备受关注。下面,我们将从多个角度对这两款产品进行深入剖析,以帮助您更好地选择适合自身需求的云服务器。
1231 2
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
583 1
|
安全 Java 网络安全
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
|
监控 Java API
如何从 Java 程序中查找内存使用情况
【8月更文挑战第22天】
1222 0
|
Python
python web框架fastapi模板渲染--Jinja2使用技巧总结
python web框架fastapi模板渲染--Jinja2使用技巧总结
1024 2
|
数据采集 人工智能 Java
Python爬虫获取电子书资源实战
最近在学习Python,相对java来说python简单易学、语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高。大大提高了咱们的生产力。为什么python能够在这几年火起来,自然有他的道理,当然也受益于这几年大数据和AI的火。据说网络上80%的爬虫都是用python写的,不得不说python写爬虫真的是so easy。基本上一个不太复杂的网站可以通过python用100多行代码就能实现你所需要的爬取。
719 1
Python爬虫获取电子书资源实战
|
算法
【MFAC】基于紧格式动态线性化的无模型自适应控制
【MFAC】基于紧格式动态线性化的无模型自适应控制