LeetCode27.移除元素
作者:互联网
/**
* 给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,
* 并返回移除后数组的新长度。
*
* 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
*
* 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
*/
//思路分析:
//1.题目要求原地移除,因此不能创建新数组,因为数组在创建后大小是不能改变的
// 一般意义上说的数组赋值其实是创建一个新数组,其长度等于旧数组
//2.因为数组创建后在内存中是连续存放的,因此可以稍微改变旧数组的值,然后将其又存储到新数组中
//3.此题目要求移出所有=val的元素,因此新数组的元素个数<=旧数组
//4.使用两个指针,左指针left代表新数组的索引,右指针right代表旧数组的索引
// 注意:旧数组的索引所在元素被修改后,旧数组也会被损坏,只会保存新数组
public int removeElement(int[] nums, int val) {
//数组长度
int len = nums.length;
//定义左指针和右指针
int right;
int left = 0;
//思路:1.因为移出后新数组的长度<=原数组,因此在不考虑用新数组和破坏原数组的情况下
//2.可以将新数组继续存储在原数组中
//3.即如果原数组中的值不等于val,则存储这个数
//4.若原数组中值=val,则不存储这个数
for (right = 0; right < len; right++) {
//每次循环,右指针右移1
//判断数组中的值和val的关系
//如果每次遍历拿到的元素不等于val,则这个元素不删除
if (nums[right] != val){
//将这个元素重新存储,
nums[left] = nums[right];
left++;
//即得到的新数组为nums[0 -- > left)
}
}
return left;
}
}
标签:val,int,元素,数组,移除,LeetCode27,left 来源: https://www.cnblogs.com/mx-info/p/14716598.html