【C语言】LeetCode 27. 移除元素 的n种解法

news2024/11/15 17:38:09

文章目录

  • 题目描述
  • 解法一 快慢下标
  • 解法二 数组移位

题目描述

OJ链接:27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
题目描述

解法一 快慢下标

设置初始值为0的快慢下标slow和fast,如果fast位置不是val值,则赋值给slow,下标都增1,那就会保留下值。
如果fast位置是val值,fast自增1,不赋值就不会再被数组保留,一次遍历后,val值就被排掉了。
时间复杂度:O(N)
空间复杂度:O(1)

int removeElement(int* nums, int numsSize, int val){
    //定义快慢下标
    int slow =0;
    int fast =0;
    //临时变量储存数组大小
    int maxRange=numsSize;
    
    while(fast<maxRange)
    {
        //如果不等于,fast位置赋值给slow位置,下标都增1
        if(nums[fast]!=val)
        {
            nums[slow]=nums[fast];
            ++slow;
            ++fast;
        }
        else//如果等于,不赋值,fast直接跳过
        {
            --numsSize;
            ++fast;
        }
    }

    return numsSize;
}//timeO(N) spaceO(1)
//for循环写法,简练写法
int removeElement(int* nums, int numsSize, int val){
    int slow =0;

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

    return slow;
}

解法二 数组移位

通过将数组整体移位是我们常用的删除数组元素的方法,只是这种方法在删除多个元素时效率并不高。
时间复杂度:O(N*N)
空间复杂度:O(1)

int removeElement(int* nums, int numsSize, int val){
    for(int i=0;i<numsSize;++i)
    {
        if(nums[i]==val)
        {
        	//将后半部分数组整体迁移1
            for(int j=i;j<numsSize-1;++j)
            {
                nums[j]=nums[j+1];
            }
            --numsSize;
            //一定要--i,确保每个元素都被筛选,是否等于val
            --i;
        }
    }

    return numsSize;
}//timeO(N*N) spaceO(1)

码字不容易,欢迎关注,点赞,收藏,评论,转发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

帮助100w人成功入职的软件测试面试常见问题以及答案

测试面试题怎么来设计测试方案根据测试需求&#xff08;包括功能需求和非功能性需求&#xff09;&#xff0c;识别测试要点&#xff0c;识别测试环境要求&#xff0c;安排测试轮次&#xff0c;根据项目计划和开发计划做整体的测试安排。被测试的特性&#xff1a;通过对需求规格…

MyBatis - 10 - 处理多对一映射关系 + MyBatis延时加载

文章目录1.准备工作1.1 建表1.2 创建Maven项目1.2.1 在pom文件中&#xff0c;修改打包方式为jar包&#xff0c;导入依赖1.2.2 创建日志配置文件和jdbc.properties1.2.3 创建Mybatis核心配置文件1.2.4 创建实体类以及实体类之间的关系1.2.5 创建SqlSession工具类2.为什么要单独处…

Ubuntu配置静态IP的方法

Ubuntu配置静态IP的方法前言一、查看虚机分配的网卡IP二、查看网卡的网关IP三、配置静态IP1.配置IPv4地址2.执行netplan apply使改动生效3.配置的网卡未生效&#xff0c;修改50-cloud-init.yaml文件解决4.测试vlan网络通信总结前言 Ubuntu18.04 欧拉环境 vlan网络支持ipv6场景…

树状数组讲解

树状数组 文章目录树状数组引入例题AcWing241.楼兰图腾思路代码AcWing 242. 一个简单的整数问题思路代码AcWing 244. 谜一样的牛思路代码总结引入 树状数组主要维护的是这样一个数据结构&#xff1a; tr[x]表示以x为终点的长度为lowbit(x)的前缀和 对于树状数组主要就两种操作 …

机器学习系统架构的10个要素

这是一个AI赋能的时代&#xff0c;而机器学习则是实现AI的一种重要技术手段。那么&#xff0c;是否存在一个通用的通用的机器学习系统架构呢&#xff1f;在老码农的认知范围内&#xff0c;Anything is nothing&#xff0c;对系统架构而言尤其如此。但是&#xff0c;如果适用于大…

风力发电机组浪涌保护器安全防护方案

风机的庞大与危险高空作业注定了其在基建和维护中不易操作&#xff0c;风机设备的主电源、过程控制、网络与通讯、现场设备需要高等级的防雷浪涌保护器冲击保护&#xff0c;提高系统及设备的可靠性和可用性。风电场的主要发电设备风力发电机组“大风车”是风电场的主要发电设备…

【数据分析】缺失数据如何处理?pandas

本文目录1. 基础概念1.1. 缺失值分类1.2. 缺失值处理方法2. 缺失观测及其类型2.1. 了解缺失信息2.2. 三种缺失符号2.3. Nullable类型与NA符号2.4. NA的特性2.5. convert_dtypes方法3. 缺失数据的运算与分组 3.1. 加号与乘号规则3.2. groupby方法中的缺失值4. 填充与剔除4.1. fi…

什么是让ChatGPT爆火的大语言模型(LLM)

什么是让ChatGPT爆火的大语言模型(LLM) 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncidref-dev-876561 文章目录什么是让ChatGPT爆火的大语言模型(LLM)大型语言模型有什么用&#xff1f;大型语言模型如何工作&#xff1f;大型语言模型的热门应用在哪里可以找到大型语言…

王道操作系统课代表 - 考研计算机 第一章 计算机概述 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “计算机概述” 章节知识点总结的十分全面&#xff0c;涵括了《操作系统》课程里的全…

(五十七)插入数据时到底是如何维护好不同索引的B+树的?

之前我们已经给大家彻底分析清楚了MySQL数据库的索引结构了&#xff0c;大家都知道不同索引的结构是如何的&#xff0c;大致是如何建立的&#xff0c;然后搜索的时候是如何根据不同的索引去查找数据的。 那么今天我们来给大家彻底讲清楚&#xff0c;你在插入数据的时候&#x…

JavaSE学习笔记day17

零、 复习昨日 File: 通过路径代表一个文件或目录 方法: 创建型,查找类,判断类,其他 IO 输入& 输出字节&字符 try-catch代码 一、作业 给定路径删除该文件夹 public static void main(String[] args) {deleteDir(new File("E:\\A"));}// 删除文件夹public s…

openjdk:8镜像中安装工具命令的方法

文章目录前言一、获取openjdk:8环境1.下载并运行openjdk:82.获取当前镜像的基础环境信息3.更换源并安装软件二、更新Dockerfile1.增加命令2.尝试构建3.测试镜像是否可用总结前言 记录一下openjdk:8镜像安装命令的方法 同事使用openjdk:8作为基础镜像构建业务镜像&#xff0c;但…

蚂蚁CTO线五年测试开发,年后被优化,跟大家唠几句

夙兴夜寐&#xff0c;回顾从毕业出来到现在的这五年&#xff0c;也是在这里给大家抛砖引玉了。先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入蚂蚁金服&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一…

软件测试的主要工作内容是什么

平时说起程序员印象中大都是做Java、做前端、做后端&#xff0c;用着非常晦涩难懂的语言。在电脑前哐哐哐&#xff0c;没一会满屏代码显现出来。然而程序员并不全是印象中这样&#xff0c;还有一部分&#xff1a;他们不常写代码&#xff0c;主要去检查代码&#xff0c;是不是出…

人工智能前置研究-神经元/离子通道

专栏目录: 高质量文章导航_GZVIMMY的博客-CSDN博客 前言: 《生命是什么》:来自有序中的有序,非周期性晶体!有机体内在生命及其外部世界的相互作用,都能被精确的定律所概述,但前提是它自身必须有一个巨大结构,分子数目太少的话,定律也就不准确了。 《神秘的量子生命…

基于RT-Thread完整版搭建的极简Bootloader

项目背景Agile Upgrade: 用于快速构建 bootloader 的中间件。example 文件夹提供 PC 上的示例特性适配 RT-Thread 官方固件打包工具 (图形化工具及命令行工具)使用纯 C 开发&#xff0c;不涉及任何硬件接口&#xff0c;可在任何形式的硬件上直接使用加密、压缩支持如下&#xf…

Python抓取数据具体流程

之前看了一段有关爬虫的网课深有启发&#xff0c;于是自己也尝试着如如何过去爬虫百科“python”词条等相关页面的整个过程记录下来&#xff0c;方便后期其他人一起来学习。 抓取策略 确定目标&#xff1a;重要的是先确定需要抓取的网站具体的那些部分&#xff0c;下面实例是…

MySQL Buffer Pool 详解

1. Buffer Pool 概述 Buffer Pool 到底是什么&#xff1f;从字面上看是缓存池的意思&#xff0c;没错&#xff0c;它其实也就是缓存池的意思。它是MySQL当中至关重要的一个组件&#xff0c;可以这么说&#xff0c;MySQL的所有的增删改的操作都是在 Buffer Pool 中执行的。 但…

90%的人都不算会爬虫,这才是真正的技术,从0到高手的进阶

很多人以为学会了urlib模块和xpath等几个解析库&#xff0c;学了Selenium就会算精通爬虫了&#xff0c;但到外面想靠爬虫技术接点私活&#xff0c;才发现寸步难行。 龙叔我做了近20年的程序员&#xff0c;今天就告诉你&#xff0c;真正的爬虫高手应该学哪些东西&#xff0c;就…

相向双指针 leetcode 15 16 18 611

简单介绍 与同向双指针区别就是&#xff0c;同向查找的是子串最明显得区别就是两侧进行搜索比较快 基本得模板如下 while(left < right) {if( ){}else if(){}else{ // left与right得遍历while(){}} }具体以题目为例 两数之和比较简单 不展示了 leetcode 15 三数之和 这个…