题目

Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example1:
  Given nums = [3,2,2,3], val = 3,
  Your function should return length = 2, with the first two elements of nums being 2.
  It doesn't matter what you leave beyond the returned length.
Example2:
  Given nums = [0,1,2,2,3,0,4,2], val = 2,
  Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
  Note that the order of those five elements can be arbitrary.
  It doesn't matter what values are set beyond the returned length.

思路

题目要求不使用额外的空间,移除所有数值等于val的元素,返回新数组的长度,于是想到使用替换的方法。
将数组中数值等于val的元素与数组最后一个元素互换,再将最后一个元素删除。这样就完成了一个删除数值等于val元素的操作。

Tips

STL中的容器vector

(1)声明以及初始化
//声明一个int类型的向量vec
vector<int> vec;
//声明一个int类型,初始大小为10的向量vec
vector<int> vec(10);
//声明一个int类型,初始大小为10,且元素都为0的向量vec
vector<int> vec(10, 0);
//声明一个int类型的向量vec,并用向量vec1初始化vec
vector<int> vec(vec1);
// 利用数组arr的前五个元素初始化向量vec
int arr[5] = {0, 1, 2, 3, 4};
vector<int> vec(arr, arr + 5);
(2)元素访问
//下标访问,不会进行越界检查
vec[0]
//at访问,会检查越界,如果出界会抛出out of range 异常
vec.at(0)
//访问第一个元素
vec.front()
//访问最后一个元素
vec.back()
(3)元素修改
//在int类型的向量vec的末尾添加一个int元素1
vec.push_back(1);
//删除vec的最后一个元素
vec.pop_back();
//在vec的pos位置插入元素element
vec.insert(pos, element);
//将向量vec中pos1位置与pos2位置的元素互换(swap可以用来释放内存)
vec.swap(pos1, pos2);
//删除向量vec中pos位置的元素
vec.erase(pos);
//删除向量vec中pos1位置到pos2位置的元素
vec.erase(pos1, pos2);
//清空向量vec
vec.clear();
(4)元素容量

在容器vector中,其内存占用的空间是只增不减的,比如说首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有内存空间在vector析构时回收。一般,我们都会通过vector中成员函数clear进行一些清除操作,但它清除的是所有的元素,使vector的大小减少至0,却不能减小vector占用的内存。

//向量vec的大小,它告诉你容器里有多少元素。
vec.size()
//向量vec的分配容量,可以大于size。它告诉你容器在已经分配的内存中总共可以容纳多少元素。
vec.capacity()
//释放int类型的向量vec的内存
vector<int>().swap(vec);
//降低vec的容量,使其与size匹配(可用于删除元素后,节省向量的空间)
vec.shrink_to_fit()
//为容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。
//使用push_back添加新元素
vec.reserve(10);
for(int i = 0; i < 10; i++)vec.push_back(1);
//改变容器的大小,同时创建对象。
//resize有两个参数,第一个是容器大小,第二个参数时新加入容器的元素。
//调用这个函数之后,可以使用[]添加新元素。
vec.resize(10);
vec[0] = 0;  //将第一个元素赋值为0

C++

class Solution {
public:int removeElement(vector<int>& nums, int val) {for(int i=0;i<nums.size();i++){if(nums[i] == val){nums[i] = nums.back();nums.pop_back();//对交换来的数组最后一个元素也进行检查,防止数组最后一个元素数值也等于vali--;  }}return nums.size();}
};

Python

class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""while val in nums:nums.pop(nums.index(val))return len(nums)

转载于:https://www.cnblogs.com/Jessey-Ge/p/11043494.html

27. Remove Element[E]移除元素相关推荐

  1. LeetCode OJ:Remove Element(移除元素)

    Given an array and a value, remove all instances of that value in place and return the new length. T ...

  2. LeetCode27——Remove Element(移除数组中指定的元素)

    题目: 解法: class Solution { public:int removeElement(vector<int>& nums, int val) {int cnt = 0 ...

  3. Leet Code OJ 27. Remove Element [Difficulty: Easy]

    题目: Given an array and a value, remove all instances of that value in place and return the new lengt ...

  4. leetcode python3 简单题27. Remove Element

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二十七题 (1)题目 英文: Given an array nums and a ...

  5. leetcode 27. Remove Element

    问题描述: Given an array and a value, remove all instances of that value in-place and return the new len ...

  6. 刷题第一天| 704. 二分查找、27. 移除元素

    704. Binary Search 题目链接:Link: 704. Binary Search 思路链接:代码随想录数组-二分法 思路 找出low与high的中间值mid,将nums[mid] 与t ...

  7. 27. 移除元素-E

    27. 移除元素-E //这个就没意思了,还不如链表上节点的去除呢 //27. Remove Element 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回 ...

  8. LeetCode 27.移除元素

    原题链接 /** @lc app=leetcode.cn id=27 lang=cpp** [27] 移除元素标签:拷贝覆盖主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标an ...

  9. lrange是取出所有值并移除么_图解双指针 | LeetCode 27. 移除元素

    题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 ...

  10. 2019年7月3号第九次练习(27移除元素)

    27 移除元素 这道题的大致意思是:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度.空间要求O1. 看到题后首先想到的方法是应用快慢指针进 ...

最新文章

  1. c语言实现python列表_用C语言实现python的扩展模块
  2. VTK:多块数据集用法实战
  3. Windows 2008 R2 SP1部署Lync2010企业版(一)
  4. 关于《编程之美》稿酬捐赠的补充说明
  5. vscode 国内镜像快速下载
  6. ACL2021 | 探讨跨句事件联合抽取问题
  7. linux服务器家目录,linux服务器根目录空间不足
  8. linux环境编程apue和unp,UNIX高级环境编程:源码(apue)下载 编译和运行
  9. 直方图均衡化及算法步骤
  10. 数字图像处理技术在智能交通中的应用
  11. 网件r7000梅林系统5g不稳定 5g信号经常掉线解决方法
  12. ssm+Vue计算机毕业设计益学(程序+LW文档)
  13. 我自己对英语学习的心得与体会
  14. 如何选择计算机软考科目,如何选择软考科目?
  15. 3D开发-PhotoScan 模型生成
  16. mnist 转换为record 使用tf data 转换 读取 训练
  17. P,NP,PSPACE都是什么,一文讲清计算复杂性分类
  18. C# WPF MVVM开发框架Caliburn.Micro入门介绍①
  19. 书画小说--创意电子书制作软件
  20. 11月中旬鸿蒙系统,鸿蒙系统开源联姻国产家电 新品最快11月开卖

热门文章

  1. 电脑屏幕变黄如何调整_办公室照明设计如何避免踩坑,四个要点必须注意
  2. go语言ATM小案例
  3. 记在windows上MySQL8.0安装过程中遇到的问题及解决方案
  4. Tensorflow实现CNN
  5. python 读取sheet_python实现读取excel文件中所有sheet操作示例
  6. Caliburn.Micro学习笔记(四)----IHandleT实现多语言功能
  7. 4G江湖大战全面开启 移动4G用户数突破9000万
  8. unity3d所要知道的基础知识体系大纲,可以对照着学习
  9. 2015级C++第7周项目 友元、共享数据保护、多文件结构
  10. django 学习个人总结 之many_to_one