我用好长时间才写出来,看了题解感觉他思路贼好
一、leecode题目链接
力扣
二、题解
数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
三、代码
1、老师的
思路
1)用快慢指针的思路来解决问题
slow指针:需要更新的下标位置
fast指针:指向新数组(删除目标值之后)里需要的元素
class Solution {
public int removeElement(int[] nums, int val) {
int slow=0;
for(int fast=0;fast<=nums.length-1;fast++){
if(nums[fast]!=val){
nums[slow++]=nums[fast];
}
}
return slow;
}
}
2、我的
看完题解我发现
1)没必要设置成-1,直接按照val值查找是一样的
2)整体思路不行,我这边是两头找,前面找的是要删掉的元素,后面找的是不等于要删掉的元素值的位置,然后两者交换文章来源:https://uudwc.com/A/WYz2a
class Solution {
public int removeElement(int[] nums, int val) {
int res_num=nums.length;
for(int i=0;i<=nums.length-1;i++){
if(nums[i]==val){
nums[i]=-1;
res_num--;
}
}
int i=0; //当前元素索引
int after=nums.length-1;//末尾不为-1的值
while(i<=nums.length-1 && i<after){
if(nums[i]==-1){
while(nums[after]==-1&&after>i){
after--;
}
if(nums[after]!=-1 ){
int tmp=nums[i];
nums[i]=nums[after];
nums[after]=tmp;
}
}
i++;
}
return res_num;
}
}
文章来源地址https://uudwc.com/A/WYz2a