26. 删除排序数组中的重复项/27. 移除元素/80. 删除排序数组中的重复项 II

26. 删除排序数组中的重复项
class Solution {
 public:
	 //剑指offer面试3不一样,这题用的双指针Ori,New

	 int removeDuplicates(vector<int>& nums) {
		 int len = nums.size();
		 if (len <= 0)return 0;
		 int New = 0,Ori = 0;
		 for (New, Ori; New < len&&Ori < len;)
		 {			 
			 int temp = nums[Ori];   
			 while (Ori < len&& temp == nums[Ori] )// 跳过重复的数
				 Ori++;
			 nums[New] = temp; New++;
		 }
		 nums.erase(nums.begin()+New,nums.end());//删除最后的New到最后的数据
		 len = nums.size();
		 return len;
	 }
 };

vector::erase

27. 移除元素
class Solution {
 public:
	 //再用双指针
	 int removeElement(vector<int>& nums, int val) {
		 int len = nums.size();
		 if (len <= 0)return 0;
		 int New = 0, Ori = 0;
		 for (New, Ori; New < len&&Ori < len;)
		 {
			 while (Ori< len&&nums[Ori] == val)Ori++;
			 if (Ori < len)//防止上面最后一个元素相等
			 {
				 nums[New] = nums[Ori]; 
				 New++; 
				 Ori++;
			 }
		 }
		 nums.erase(nums.begin() + New, nums.end());
		 return nums.size();
	 }
 };
 
80. 删除排序数组中的重复项 II

要求:给定一个排序数组,你需要在本体删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。只是在26题的基础上添加一个变量count代表重复次数。

c++,leetcode 击败了98.84%

class Solution {
 public:
	 int removeDuplicates(vector<int>& nums) {		  
		int len = nums.size();
		if (len <= 0)return 0;
		int New = 0, Ori = 0,count=0;
		for (New, Ori; New < len&&Ori < len;)
		{
			int temp = nums[Ori];
			while (Ori < len&&temp == nums[Ori])// 跳过重复的数并计数
			{
				Ori++;
				count++;
			}
			if (count >= 2)//计数重复超过1次,多插入一次
			{
				nums[New] = temp; New++;
			}
			nums[New] = temp; New++;
			count = 0;	 
		}
		nums.erase(nums.begin() + New, nums.end());//删除最后的New到最后的数据
		return nums.size();
	}
 };

你可能感兴趣的:(leetcode题,leetcode)