我用好长时间才写出来,看了题解感觉他思路贼好
一、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)整体思路不行,我这边是两头找,前面找的是要删掉的元素,后面找的是不等于要删掉的元素值的位置,然后两者交换
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;}
}