同学录网站开发的背景,最好科技广州网站建设,广告营销包括哪些方面,flash网站的优缺点移除元素 给你一个数组 nums 和一个值 val#xff0c;你需要 原地 移除所有数值等于 val 的元素#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新…移除元素 给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。 不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 方法一、双指针
注意到上述描述中存在“元素的顺序可以改变”数组无序目的是去重那么我们使用双指针来遍历及操作。 定义双指针left和rightleft从0开始向右侧遍历right从最后一位开始向左侧遍历最坏情况下只遍历一次数组效率较高。 当left值等于val时将right位置的值赋值给leftright减1向左侧移动一位下次若还相同则继续将right位置的值赋值给leftright减1向左侧移动一位直至left位置的值不等于val将left加1右移一位。代码如下
Swift
func removeElement(_ nums: inout [Int], _ val: Int) - Int {guard nums.count 0 else {return 0}let cnt nums.countvar left 0, right cntwhile leftright {if nums[left] val {nums[left] nums[right-1]right - 1}else {left 1}}return left}OC
- (NSInteger) removeElement:(NSMutableArray *)nums val:(NSInteger)val {if (nums.count 0) {return 0;}NSInteger left 0, right nums.count;while (left right) {if ([nums[left] integerValue] val) {nums[left] nums[right-1];right--;}else {left;}}return left;
}