1. 程式人生 > >leetcode27 Remove Element (刪除目標元素)

leetcode27 Remove Element (刪除目標元素)

題目要求:

給定一個數組和一個目標值,在陣列內刪除所有目標值項並返回不包含目標值的陣列長度
不要為另一個數組分配額外的空間,保持空間複雜度是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! } };

原題連結:https://leetcode.com/problems/remove-element/