移除元素
题意为在原数组基础上移除值等于val的元素。
首先对数组进行排序,排序后值等于val的元素就集中到了某一段中。
接着我们查找到值等于val的第一个元素下标,并记录app=i
然后继续向后查找统计重复的个数,直到查找到值不等于val的元素,将这个元素和之后的元素赋值给从app开始的位置(相当于减掉中间元素值和val相等的一段)。
最后输出长度size-重复的个数count即为移除后数组的长度。
解决代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size=nums.size();
sort(nums.begin(),nums.end());
int count=0;
for(int i=0,j;i<size;i++)
{
if(nums[i]==val)
{
int app=i;
count++;
for(j=i+1;j<size;j++)
{
if(val!=nums[j])
{
nums[app++]=nums[j];
}
else
{
count++;
}
}
break;
}
}
return size-count;
}
};
复杂度:O(n*(logn)+1)