27. Remove Element[E]移除元素
题目
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();
//对交换来的数组最后一个元素也进行检查,防止数组最后一个元素数值也等于val
i--;
}
}
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)
27. Remove Element[E]移除元素的更多相关文章
- LeetCode 27. Remove Element (移除元素)
Given an array and a value, remove all instances of that value in place and return the new length. D ...
- 27. Remove Element C++移除元素
网址:https://leetcode.com/problems/remove-element/ 双指针(广义) class Solution { public: int removeElement( ...
- LeetCode 27 Remove Element (移除数组中指定元素)
题目链接: https://leetcode.com/problems/remove-element/?tab=Description Problem : 移除数组中给定target的元素,返回剩 ...
- LeetCode OJ:Remove Element(移除元素)
Given an array and a value, remove all instances of that value in place and return the new length. T ...
- 27. Remove Element【leetcode】
27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...
- [Leetcode][Python]27: Remove Element
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 27: Remove Elementhttps://oj.leetcode.c ...
- 27. Remove Element【easy】
27. Remove Element[easy] Given an array and a value, remove all instances of that value in place and ...
- leetCode练题——27. Remove Element
1.题目 27. Remove Element——Easy Given an array nums and a value val, remove all instances of that valu ...
- leetCode 27.Remove Element (删除元素) 解题思路和方法
Remove Element Given an array and a value, remove all instances of that value in place and return th ...
随机推荐
- Verification之PSL之use
1 Where can PSL be used? • Documentation – Requirements – RTL Designs • Controllers – Memories, FIFO ...
- 压缩映射:简单最邻近搜索-(SLH)Simple Linear Hash
Compact Projection: Simple and Efficient Near Neighbor Search with Practical memory Requirement Auto ...
- Mysql分组求和&LIMIT
分组求和mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY na ...
- Arduino LM35温度检测
一. 接线原理图 二.实物图 三.代码例子
- http 请求头示例
POST /3-0/app/account/item HTTP/1.1 Host 10.100.138.32:8046 Content-Type application/json Accept-E ...
- Python-通过configparser读写配置文件
Python读写配置文件: 1.创建配置文件(文件名以.conf或.ini结束的文件表示配置文件) 2.导入所需模块 OS, configparser >>> import os & ...
- 死磕itchat源码--config.py
itchat的配置文件,源码: import os, platform # 版本及微信的url,二维码等 VERSION = '1.3.10' BASE_URL = 'https://login.we ...
- Keras手写识别例子(1)----softmax
转自:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/#测试模型 下载数据: # downlo ...
- 【编程工具】Vim编辑器的使用
1.Vim简介 Vim最初起源于古老的贝尔实验室,由"Bram Moolenaar等人"开发,是一个功能强大的文本编辑器,被推崇为类Vi编辑器中最好的一个. Vim是一个类 ...
- 【hihocoder 1295】Eular质数筛法
[题目链接]:http://hihocoder.com/problemset/problem/1295 [题意] [题解] 可以在O(N)的复杂度内求出1..N里面的所有素数; 当然受空间限制,N可能 ...