这两道都是easy类别的题目
用两指针代替for循环。
27.问题描述
Remove Element
移除所给的val值,并保持数组原来的顺序,返回改变后的数组。且不允许自申请额外内存。
Example:
Given input array nums = [3,2,2,3], val = 3
Your function should return length = 2, with the first two elements of nums being 2.
3ms
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int count=0;
for(int i=0;i<nums.size();i++)
if(nums[i]!=val)
nums[count++]=nums[i];
return count;
}
};
显然,是一个两指针问题,一个i遍历整个数组,另一个count只存放与val不同的数。
26.问题描述
从已经排序好的数组中移除相同元素。不允许自己申请内存,返回新数组。
For example,
Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter what you leave beyond the new length.
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int count=0;
int len=nums.size();
if(len==0)
return 0;
for(int i=0;i<len;i++)
{
if(nums[i]!=nums[count])
{
nums[++count]=nums[i];
}
}
return count+1;
}
};
if如果加了else会影响速度,所以有时候可以不需要加else。