Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
//A剩余的顺序和答案不一样,没通过 其实这个是对的
class Solution {
public:
int removeElement(int A[], int n, int elem)
{
int res = 0;
for (int i=0;i<n;i++)
{
if(A[i] != elem)
A[res++]=A[i];
}
return res;
}
};
class Solution {
public:
int removeElement(int A[], int n, int elem)
{
int res = 0, j=n-1;
for (int i=0;i<n;i++)
{
if(A[i] == elem)
{
while(A[j] == elem)
j--;
if (i>=j)
break;
else
swap(A[i], A[j]);
}
res++;
}
return res;
}
};
测试
#include<iostream>
using namespace std;
class Solution {
public:
int removeElement(int A[], int n, int elem)
{
int res = 0;
for (int i=0;i<n;i++)
{
if(A[i] != elem)
A[res++]=A[i];
}
return res;
}
};
class Solution1 {
public:
int removeElement(int A[], int n, int elem)
{
int res = 0, j=n-1;
for (int i=0;i<n;i++)
{
if(A[i] == elem)
{
while(A[j] == elem)
j--;
if (i>=j)
break;
else
swap(A[i], A[j]);
}
res++;
}
return res;
}
};
int main()
{
Solution1 s;
int A[] = {1,2,3,4,5,6,3,3};
int res = s.removeElement(A,4,1);
cout<<res<<endl;
for (int i=0;i<res;i++)
cout<<A[i]<<" ";
cout<<endl;
}