一、题目描述
二、示例
三、难度
简单
四、代码
Java版
法一
public class Solution {
public static int removeElement(int[] nums, int val) {
if(nums.length == 0) return 0;
int i = 0, j = nums.length - 1;
while (i != j) {
if (nums[i] == val) {
int temp = nums[i];
nums[i] = nums[j];
nums[j--] = temp;
}
else ++i;
}
if (nums[i] == val) return i;
return i+1;
}
public static void main(String[] args) {
System.out.println(removeElement(new int[]{0,1,2,2,3,0,4,2},2));
}
}
法二:快慢指针
class Solution {
public int removeElement(int[] nums, int val) {
int fast = 0, slow = 0;
while (fast < nums.length) {
if (nums[fast] != val) {
nums[slow++] = nums[fast];
}
++fast;
}
return slow;
}
}
C++版
法一
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0, right = nums.size()-1;
while (left <= right) {
if (nums.at(left) == val) {
nums.at(left) = nums.at(right--);
}
else
++left;
}
return left;
}
};
法二:快慢指针
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast = 0, slow = 0;
while (fast < nums.size()) {
if (nums.at(fast) != val) {
nums.at(slow++) = nums.at(fast);
}
++fast;
}
return slow;
}
};