LeetCode27移除元素的两种方法(Java实现)
2023-12-13 13:01:24
LeetCode27移除元素的两种方法
首先,我们来看下题目。
在这里首先补充下数组的知识,我们知道数组中的元素是无法进行删除的,只能覆盖,我们看到的删除操作实际上是底层进行了覆盖。
那么我们再来看这道题,题目要求找到目标的元素进行删除,那么其实就是让我们将目标元素进行一个覆盖操作。
方法1:暴力求解
暴力求解的思路如下,首先我们用一个指针flag
指向数组下标为0的地方,flag用于遍历整个数组,如果找到了目标值,那么用另一个指针
Key
进行覆盖操作,也就是将所有的元素向前移一位。大概思想就是这样。具体的代码实现如下:
public static int removeElement(int[] nums, int val) {
int i=0; //指针用于遍历数组
int j =0;//用于进行覆盖操作
int len=nums.length;
for (i=0;i<len;i++){
if (nums[i]==val){
for (j=i+1;j<len;j++){//这里让j=i+1主要是因为防止越界。
nums[j-1]=nums[j];
}
//每进行一次覆盖,数组长度减1,并且让i--,
//因为可能覆盖之后的元素为目标值。
len--;
i--;
}
}
return len;
}
方法1:双指针解法
双指针的思路如下,首先定义一个快指针fast,定义一个慢指针slow,快指针用于遍历数组,慢指针用于进行覆盖操作,这里我们举个例子
如图所示,我们将快指针指向第一个元素,同样慢指针指向第一个元素,这时fast开始遍历,假如我们的targe
值为3,遍历到第一个元素发现不是targe
值,此时将数组nums[fast]的元素赋值给nums[slow],然后slow++,进行下一元素的查找。这样遍历到最后,数组就变为[1,2,5],此时slow指向下标为3的地方,直接对slow进行返回即可。具体的代码实现如下:
public static int removeElement(int[] nums, int val) {
int len =nums.length;
int slow=0;
int fast=0;
for (fast=0;fast<len;fast++){
if (nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}
今天的例题思路和代码讲解到这里就结束了,如果哪里看不懂可以在文章下方留言,博主看到了会进行答疑,觉得博主写的不错的麻烦给个小小的3连吧,谢谢(●ˇ?ˇ●)!
文章来源:https://blog.csdn.net/Kirihara_Yukiho/article/details/134964928
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!