java移除元素问题

7 篇文章 0 订阅
6 篇文章 0 订阅

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;
    }
}

运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值