leetcode27 Remove Element (刪除目標元素)
阿新 • • 發佈:2018-12-31
題目要求:
給定一個數組和一個目標值,在陣列內刪除所有目標值項並返回不包含目標值的陣列長度
不要為另一個數組分配額外的空間,保持空間複雜度是O(1)。
Example:
輸入 [3,2,2,3],val=3。輸出:2
輸入 [0,1,2,2,3,0,4,2],val=2 輸出:5
解題思路
1.雙指標法
參考26題leetcode26我們用一個指標來從前到後對陣列進行遍歷,另一個指標來記錄非目標元素(最後指向末尾)
主要程式碼如下c++:
// leetcode 27
// Remove Element
class Solution {
public:
int removeDuplicates(vector<int>& nums, int val) {
int record = 0; // For record.
for(int traverse = 0; traverse < nums.size(); ++traverse)
{
// consider whether is target val.
// record the non-target element and move.
if(nums[traverse] != val)
nums[record++] = nums[traverse];
}
return record;
}
};
2.迭代器法
思路一樣,只不過換了更高效的迭代器來實現,最後返回不要弄錯。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
vector<int>::iterator record, traverse;
for(record=traverse= nums.begin(); traverse != nums.end(); ++traverse)
{
if(*traverse == val)
{
}
else{
*record = *traverse;
record++; // to the next;
}
}
return record - nums.begin(); // to be noticed!
}
};