Java移除元素问题
题目描述
示例:
方法一
使用ArrayList集合,把不是排除的元素保存在集合中,最后遍历集合,把数据取出来重新覆盖数组
class Solution {
public int removeElement(int[] nums, int val) {
List<Integer> list = new ArrayList<>();
for(int i = 0;i<nums.length;i++){
if(nums[i] != val){
list.add(nums[i]);
}
}
int i = 0;
for(Integer key:list){
nums[i++] = key;
}
return list.size();
}
}
运行截图
方法二
使用数组本身,将非移除数据进行覆盖原数组
class Solution {
public int removeElement(int[] nums, int val) {
int index = 0;
for(int i = 0;i<nums.length;i++){
if(nums[i]!=val){
nums[index++] = nums[i];
}
}
return index;
}
}
运行截图
方法三
使用双指针
1.定义左右指针
左指针为 int left = 0;
右指针为 int right = nums.length;
2.保证左指针小于右指针,可以进行遍历
3.两个指针分别从数组的两端开始遍历
如果左指针向右移动时遇到要删除的元素,此时末尾的元素把当前元素进行覆盖,如果存在末尾或者右指针指向的元素为要排除的元素,左指针不会移动,直到右指针遇到非排除元素将其覆盖
4.返回左指针的值即可
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;
}
}
运行截图