LeetCode-Java题解 27. Remove Element
题目地址:27. Remove Element
方法一:
解题思路:这个题目第一反应的就是双重循环暴力破解。虽然很不优雅,但是的确是个快狠准的方法。
需要注意的是,由于向前移动元素,并没有“真正”的删除元素,数组长度是不会变化的,所以需要额外申请一个length
来记录数组长度。把握好数组长度这个边界条件的话,用暴力破解是没有任何难度的。
class Solution {
public int removeElement(int[] nums, int val) {
if(nums.length==0)
{
return 0;
}
int length = nums.length;
for (int i = 0; i <length; i++) {
if (nums[i] == val) {
int j=i;
while (j<length-1){
nums[j]=nums[j+1];
j++;
}
length-=1;
i=i-1;
}
}
return length;
}
}
方法二:
解题思路:还有另外一种更优雅的方法就是“双指针”法,在无法新申请数组空间的情况下,将整个数组认为的划分为两个区域,第一个区域就是待检索区域,第二个区域就是废弃区域(把删除的元素放置于此,把没检测的元素交换至待检索区域),这样就避免了双重循环,使得时间复杂度从O(n2)降低至O(n),从而达到简化的效果。
class Solution {
public int removeElement(int[] nums, int val) {
if(nums.length<=0){
return 0;
}
int length = nums.length-1;
int temp;
for (int i = 0; i <= length; i++) {
if (val == nums[i]) {
temp=nums[i];
nums[i]=nums[length];
nums[length]=temp;
length--;
i--;
}
}
return length+1;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步