Leetcode 27. Remove Element
2017-12-29 10:09
302 查看
题目的意思是给定一个数组和一个值,让在不开辟额外空间的情况下删掉数组中该值,并且返回除去该目标值之后数组的新长度。数组中元素的顺序可以发生变化。
方法1:把目标值都删掉,然后返回数组的长度。每次erase的代价是O(n),算法时间复杂度O(n2)。
方法2:最好的方法:从283题可以看出,换不如直接搬好。
其他方法:
方法3:为了降低时间复杂度,可以先排个序,将目标值集中在一处进行批量删除,批量删除erase的时间复杂度是O(n),算法的时间复杂度是O(nlogn)。
方法4:题目要求不能开辟新的空间,所以想到设置两个头尾指针进行元素互换,将所有目标值都换到数组的尾部。时间复杂度O(n)。
方法1:把目标值都删掉,然后返回数组的长度。每次erase的代价是O(n),算法时间复杂度O(n2)。
class Solution { public: int removeElement(vector<int>& nums, int val) { for(int i=0; i<nums.size(); ++i) { if(nums[i]==val) { nums.erase(nums.begin()+i); i--; } } return nums.size(); } };
方法2:最好的方法:从283题可以看出,换不如直接搬好。
class Solution { public: int removeElement(vector<int>& nums, int val) { int j=0; for(int x:nums) { if(x!=val) nums[j++]=x; } return j; } };
其他方法:
方法3:为了降低时间复杂度,可以先排个序,将目标值集中在一处进行批量删除,批量删除erase的时间复杂度是O(n),算法的时间复杂度是O(nlogn)。
方法4:题目要求不能开辟新的空间,所以想到设置两个头尾指针进行元素互换,将所有目标值都换到数组的尾部。时间复杂度O(n)。
相关文章推荐
- Leetcode 27. Remove Element
- LeetCode | 27. Remove Element
- [LeetCode-27] Remove Element(从数组删除指定的元素)
- leetcode[27]Remove Element
- LeetCode 27. Remove Element
- Leetcode 27 Remove Element
- 刷题的日常[Leetcode]——27)Remove Element
- leetcode-java-27. Remove Element
- LeetCode 27. Remove Element
- leetcode:27 Remove Element-每日编程第二十一题
- LeetCode(27)-Remove Element
- leetcode-27-Remove Element
- LeetCode-27-Remove Element(数组)-Easy
- leetcode_question_27 Remove Element
- LeetCode 27. Remove Element
- Leetcode 27. Remove Element
- LeetCode-27. Remove Element
- LeetCode 27---Remove Element
- LeetCode(27)-Remove Element
- Leetcode 27. Remove Element