当前位置: 首页 > news >正文

【代码随想录】LC 27. 移除元素

文章目录

  • 前言
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、知识风暴

前言

本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。

一、题目

1、原题链接

27. 移除元素

2、题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、解题报告

1、思路分析

  1. 暴力解法
    利用两层循环,第一层循环找到值等于val的元素,第二层循环“移除元素”。(数组移除元素就是将该位置后面的元素依次向前移动一个位置,从而达到“移除”的效果,注意移动的顺序:应该从待移动序列前往后依次向前移动,否则会造成数组元素值“丢失”)
  2. 双指针法
    设置两个指针,快指针用来遍历数组慢指针用来找到值为val的元素。具体流程:快指针和慢指针初始指向数组中第一个元素,然后快指针向后遍历数组,当数组元素的值不等于val时,慢指针也向后移动,同时记录该元素在数组中如果数组元素的值等于val时,慢指针不动,快指针继续向后遍历,直到数组元素的值不等于val,执行前述操作。直至快指针遍历完整个数组。算法结束,此时慢指针正好记录了移除重复元素后的数组长度

2、时间复杂度

暴力解法时间复杂度O(n^2)
双指针法时间复杂度O(n)

3、代码详解

暴力解法代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {int cnt = nums.size(); //注意循环条件i<cnt,不要写成i<nums.size()造成错误   for (int i = 0; i < cnt; i++) {if (nums[i] == val) {//“移除”过程:i位置后的所有元素向前移动一个位置for (int j = i + 1; j < cnt; j++) {nums[j-1] = nums[j];}cnt--;//i后面元素都向前移动了一个位置,i也向前移动一个位置//下一次循环时相当于i没有动,而元素向前移动了一个位置//i也就指向了下一个需要遍历的数组元素i--;}}return cnt;}
};

双指针法代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {int slowPoint=0;//快指针遍历数组for (int fastPoint = 0; fastPoint < nums.size(); fastPoint++) {//慢指针记录结果:只记录值不为val的所有元素if (nums[fastPoint] != val) {nums[slowPoint++]=nums[fastPoint];}}//此时slowPoint正好记录了移除重复元素后的数组元素个数return slowPoint;}
};

三、知识风暴

  • 双指针法
http://www.lryc.cn/news/184618.html

相关文章:

  • crash工具分析dma设备内存踩踏(一)
  • C#上位机——根据命令发送
  • BEVFormer代码跑通
  • kafka安装
  • Mac上安装Java的JDK多版本管理软件jEnv
  • linux常见命令以及jdk,tomcat环境搭建
  • 将表情存入数据库
  • H桥级联型五电平三相逆变器Simulink仿真模型
  • 后端解决跨域(极速版)
  • 数据结构与算法-前缀树
  • DirectX12_Windows_GameDevelop_3:Direct3D的初始化
  • 基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)
  • 数据分析篇-数据认知分析
  • 【力扣-每日一题】714. 买卖股票的最佳时机含手续费
  • 【代码实践】HAT代码Window平台下运行实践记录
  • 机器学习-Pytorch基础
  • 金九银十,刷完这个笔记,17K不能再少了....
  • 精确到区县级街道乡镇行政边界geojson格式矢量数据的获取拼接实现Echarts数据可视化大屏地理坐标信息地图的解决方案
  • 【Python 千题 —— 基础篇】多行输出
  • AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一
  • Py之pygraphviz:pygraphviz的简介、安装、使用方法之详细攻略
  • acwing算法基础之基础算法--前缀和算法
  • 华为云云耀云服务器L实例评测|Ubuntu 22.04部署edusoho-ct企培版教程 | 支持华为云视频点播对接CDN加速
  • 土木硕设计院在职转码上岸
  • js查询月份开始和结束日期
  • mybatis开发部分核心代码
  • Springboot中查看gradle工程使用了哪些仓库
  • c#中的接口
  • 老卫带你学---leetcode刷题(76. 最小覆盖子串)
  • Maven-DskipTests和-Dmaven.test.skip=true的区别