Remove Element

本文介绍了两种方法来实现数组中特定元素的移除及计算剩余元素数量,通过双指针技术高效完成任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

问题描述:给定一个数组和一个值,在这个数组中移除与这个值相等的所有元素,返回这个数组新的长度。

这里给出两种不同的代码,但是原理是一样的,都是采用双指针的思想。

第一种思路:i和j指针,i指向数组的头部,j指向尾部,从头开始搜索,找到第一个等于elem值得位置,与尾部第一个不等于elem的第一个进行交换,交换完之后,low++,high--;



public class Solution {
    public int removeElement(int[] A, int elem) {
        int low = 0;
        int temp;
        int count = 0;
        int high = A.length - 1;
        while(low <= high){
        	if(A[low] == elem){
        		while(high>low){
        			if(A[high]==elem){
        				high--;
        				count++;
        			}
        			else{
        				break;
        			}
        		}
        		count++;
        		temp = A[low];
        		A[low] = A[high];
        		A[high]= temp;
        		high--;
        	}
        	else{
        		low++;
        	}
        }
        return (A.length - count);
    }
}

这种方法代码看起来有点复杂,其实还是很容易明白的。

第二种思路:i和j指针同时从头开始,当遇到等于elem的值,我们不管,直接把后面不等于elem的值直接往前填补。



public class Solution {
    public int removeElement(int[] A, int elem) {
       int j = 0;
       for(int i = 0; i <= A.length-1; i++){
           if(elem != A[i]){
               A[j] = A[i];
               j++;
           }
       }
       return j;
    }
}

这种方法比第一种方法更通俗易懂,代码也更简洁些。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值