[LeetCode] Remove Element 分析

Remove Element算是LeetCode的一道水題,不過這題也有多種做法,現就我所知的幾種做一點討論。

題目鏈接:https://leetcode.com/problems/remove-element/

題目描述:Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn't matter what you leave beyond the new length. 
要注意的是“It doesn't matter what you leave beyond the new length.”

思路分析:思路很簡單,直接上代碼。

Solution 1:暴力移動

 1 class Solution {
 2 public:
 3     int removeElement(vector<int>& nums, int val){
 4         int len = nums.size();
 5         int ptr = 0;
 6         int newLen = 0;
 7         for(int i = 0;i<len;i++)
 8         {
 9             if(nums[i]!=val)
10             {
11                 nums[ptr++]=nums[i];
12             }
13         }
14         newLen = ptr;
15         return newLen;
16     }
17 };

Solution 2:使用STL

1 class Solution {
2 public:
3     int removeElement(vector<int>& nums, int val) {
4         auto end = remove(nums.begin(),nums.end(),val);//這裏用到了自動指針
5         return distance(nums.begin(),end);
6     }
7 };

 關於Solution 2中STL的使用:

1,remove算法描述:查找的得到第一個元素的位置,然後從此位置開始遍歷容器,將後面的元素依次前移,跳過和value相同值的元素,也就是說,所有和value相同值的元素都會被覆蓋,而其他的元素都會依次前移。最後remove返回"指向最後一個'有用'元素的iterator",但是在remove算法過程中,並沒有修改原容器的size,以及end()

2,distance()用於求出迭代器之間的距離,即兩個參數之間的元素個數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章