题目要求只需要返回新数组的长度,所以我们可以考虑遍历数组,将发现的val值的元素与最后一个非val值的元素交换位置,并使用一个count记录非val值元素的个数,count值即为新数组的长度。
(详细见代码注释)
class Solution {
//交换两个元素的位置
public void sort(int[] nums, int left, int right){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
public int removeElement(int[] nums, int val) {
int left = 0, right = nums.length - 1; //双指针分别指向数组的第一个元素和最后一个元素
int count = 0; //记录新数组的长度
while(left<=right){
if(nums[left] == val){ //数组中存在想要移除的元素
if(nums[right] != val){ //将该位置的元素与最后一个非val值的元素交换
sort(nums,left,right);
--right; //右指针左移
}else{
--right; //右指针左移找到最后一个非val值的元素
continue;
}
}
++left; //非val值,左指针右移
++count; //新数组长度+1
}
return count;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/121959628
内容来源于网络,如有侵权,请联系作者删除!