leetcode 27 [remove val]

2023-11-07

leetcode 27 [remove val]

改进前

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
        for (int i = 0; i < size; i++)
        {
            while (nums[i] == val)//考虑到后面移过来的元素可能还是要
            //移除的,所以改用循环处理,但是在最后一个如果是目标数,就会陷入死循环
            {
                size--;
                nums[i] += 1;//因为没有想到移动i指针,为了避免移到后面的元素会在最后一轮和最后
                //一个元素搞混而陷入死循环。所以,+1就不会一样啦。
                for (int j = i; j < size; j++)
                    nums[j] = nums[j + 1];//0,1,2,2,3,0,4,2 
            }
        }
        return size;
    }
};

改进后

#include <iostream>
using namespace std;
#include <vector>
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
        for (int i = 0; i < size; i++)
        {
            if (nums[i] == val)//还是用if判断,不会陷入死循环
            {
                size--;
                i--;//由于后面的数都向前移动了以为,所以在i这个位置还属于没有处理的元素,下一轮还
                //要继续处理该位置,但是for循环里i++了,所以这里i--;
                //nums[i] += 1;
                for (int j = i; j < size; j++)
                    nums[j] = nums[j + 1];//0,1,2,2,3,0,4,2 
            }
        }
        return size;
    }
};
int main(void)
{
    vector <int> num={ 0,1,2,2,3,0,4,2 };
    int target = 2;
    Solution s;
    cout << s.removeElement(num, target);
    return 0;
}

究极改进版——双指针法

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++)
        {
            if (val != nums[fastIndex])
                nums[slowIndex++] = nums[fastIndex];
        }
        return slowIndex;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 27 [remove val] 的相关文章

随机推荐

  • Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • php上传文件到指定文件夹

    效果图如下 首先我们需要一个index html页面上传文件
  • Centos运行Spring Boot Jar包

    在Centos服务器上运行Jar文件时通常的方法是 ssh窗口关闭时 程序中止运行 java jar healthy jar 指定端口启动 java jar healthy jar server port 8080 指定环境及端口启动 ja
  • IP地址分类详解:A、B、C、D类地址如何划分的以及保留地址(特殊地址)介绍

    一 IP地址类型 2 1基本分类 最初设计互联网络时 为了便于寻址以及层次化构造网络 每个IP地址包括两个标识码 ID 即网络ID net id 和主机ID host id 同一个物理网络上的所有主机都使用同一个网络ID 网络上的一个主机
  • Unity 场景循环

    Unity 场景循环策略 情况一 小车一直行驶在平直的路面 需要地图依次循环 当小车快要行驶出第一张地图时候加载第二张 依次循环 using System Collections using System Collections Gener
  • 软件设计师(八)算法设计与分析

    算法被公认为是计算机科学的基石 算法理论研究的是算法的设计技术和分析技术 一 算法设计和分析的基本概念 1 算法 Algorithm 算法 是对特定问题求解步骤的一种描述 它是指令的有限序列 其中每一条指令表示一个或多个操作 一个算法有5
  • uTools工具

    uTools工具
  • js手写防抖、节流函数-基本实现

    认识防抖debounce函数 我们都遇到过这样的场景 在某个搜索框中输入自己想要搜索的内容 比如想要搜索一个MacBook 当我输入m时 为了更好的用户体验 通常会出现对应的联想内容 这些联想内容通常是保存在服务器的 所以需要一次网 络请求
  • 线性结构 队列

    线性结构 队列 一 队列的定义 二 抽象数据类型 三 顺序存储 循环队列 基本思路 存储结构 部分操作 四 链式存储 链式队列 一 队列的定义 队列 Queue 是具有一定操作约束的线性表 插入和删除操作有一定要求 只能在一端插入 而在另一
  • Inno Setup入门

    一个最简单的安装脚本 1 最简单的安装文件脚本 setup AppName Test AppVerName TEST DefaultDirName E TEST AppVersion 1 0 files Source F desktop i
  • shell文件存在的判断 shell数组

    判断文件 WORKDIR home tmp LOCAL LIST FILE WORKDIR local list if no local txt file generate a new one if f LOCAL LIST FILE th
  • 解决QString类型中一些使用规则

    参考网页 http www kuqin com qtdocument qstring html fromLatin1 1 QString类型中的使用 QString str QString fromLatin1 123456789 5 st
  • nginx负载均衡与日志配置

    nginx负载均衡与日志配置 1 设置nginx负载均衡 1 1 找到nginx conf文件 并进行配置 2 设置nginx日志 2 1 找到nginx conf文件 配置日志nginx日志 2 查看 设置 1 设置nginx负载均衡 当
  • 史上无敌的超级详细的Node Js 环境搭建步骤

    今日分享内容 一 Node Js 环境搭建 1 Node js是什么 2 npm是什么 3 环境搭建步骤 二 Element简介 一 Node Js 环境搭建 1 Node js是什么 Node js是一个基于Chrome V8引擎的 Ja
  • DBCP 1.X 导致的生产环境部署问题

    应用部署到生产环境 启动后 首次登录没问题 再过几分钟或者说再次登录 却出现登录没响应 查询数据界面没响应等 数据库查询没响应的问题 但奇怪的是后台没任何不报错 初步怀疑是数据库会话数爆满引起的 通过LambdaProbe监控工具 发现应用
  • (入门题)题目 1579: 陶陶摘苹果2

    题目 陶陶家的院子里有一棵苹果树 每到秋天树上就会结出n个苹果 苹果成熟的时候 陶陶就会跑去摘苹果 陶陶有个30厘米高的板凳 当她不能直接用手摘到苹果的时候 就会踩到板凳上再试试 现在已知n个苹果到地面的高度 以及陶陶把手伸直的时候能够达到
  • 火影手游饰品分解

    文章目录 Part I 简介 Chap I 饰品种类与抗魔 Chap II 战力加成 Part II 强化消耗与分解返还 Chap I 祝福饰品分解返还与耗材 Chap II 祈愿饰品 130 Chap III 破晓饰品 140 及以后 P
  • 企业数字化转型过程中面临最大的挑战和问题是什么?

    无论组织规模如何 业务的敏捷性 弹性以及生产力的高低都是决定其发展运营成功与否的关键因素 而一个良好的数字化转型战略则是企业发展进步的有力助推器 麦肯锡称 借助数字化转型 可以实现 20 至 50 的经济收益和 20 至 30 的客户满意度
  • 【Unity】简单介绍使用Sprite Editor的四种裁剪

    学习目标 众所周知当我们在Untiy导入一张Sprite图的时候需要修改它的参数 如果精灵图中有多张图片 还要将其裁剪 今天简单介绍一下SpriteEditor中的三种模式 学习内容 首先我们要将一张图片模式设置成Mulitple模式 这样
  • leetcode 27 [remove val]

    leetcode 27 remove val 改进前 class Solution public int removeElement vector