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/

猜你喜欢

转载自blog.csdn.net/qq_37466121/article/details/85174619