题目
力扣代码
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length;
while (left < right) {
if (nums[left] == val) {
nums[left] = nums[right - 1];
right--;
} else {
left++;
}
}
return left;
}
}
我的代码
class Solution {
public int removeElement(int[] nums, int val) {
int len=nums.length;
if(len==0) return 0;
int count=0;
int end=len-1;
for(int i=0;i>=0&&i<=end;i++){
while(end>=0&&nums[end]==val){
end--;
count++;
}
if(end<0){
break;
}
if(nums[i]==val){
if(i<end){
nums[i]=nums[end];
nums[end]=val;
end--;
count++;
}
else{
break;
}
}
}
return len-count;
}
}
代码二
class Solution {
public int removeElement(int[] nums, int val) {
int len=nums.length;
int left=0,right=0;
for(right=0;right<len;right++){//逐个考察元素是否能留下
if(nums[right]!=val){
nums[left]=nums[right];
left++;
}
}
return left;
}
}
/*
left存放新元素,初始化为 0。这是因为我们要在原数组上构建一个不包含指定值 val 的新数组
right初始化为 0。我们需要遍历整个原数组来判断每个元素是否需要保留,而遍历通常从数组的第一个元素开始,所以 right指针也从索引 0 开始,它的作用是逐个检查原数组中的元素。
当 right 指针指向的元素不等于 val 时,说明这个元素是要保留在新数组中的,我们将该元素赋值给 left 指针所指向的位置.left指针向后移动一位,为下一个要保留的元素预留位置。
right指针在每次循环中都会向后移动一位,即 fast++。这是因为它的主要任务是遍历整个原数组,无论当前元素是否等于 val,都需要检查数组中的每一个元素。
*/
最新写的
class Solution {
public int removeElement(int[] nums, int val) {
int count=0;
int len=nums.length;
if(len==0) return 0;
if(len==1&&nums[0]==val) return 0;
int i=0,j=len-1;
for(int c=0;c<len;c++){
if(nums[c]==val){
count++;
}
}
for(i=0;i<j;i++){
if(nums[i]==val){
while(nums[j]==val&&j>0){
j--;
}
if(i<j){
nums[i]=nums[j];
nums[j]=val;
}
else{
break;
}
}
}
return len-count;
}
}