力扣题目学习笔记(OC + Swift)27.移除元素
2024-01-01 21:32:41
移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
方法一、双指针
注意到上述描述中存在“元素的顺序可以改变”,数组无序,目的是去重,那么我们使用双指针来遍历及操作。
定义双指针left和right,left从0开始向右侧遍历,right从最后一位开始向左侧遍历,最坏情况下只遍历一次数组,效率较高。
当left值等于val时,将right位置的值赋值给left,right减1向左侧移动一位,下次若还相同,则继续将right位置的值赋值给left,right减1向左侧移动一位,直至left位置的值不等于val,将left加1,右移一位。代码如下:
Swift
func removeElement(_ nums: inout [Int], _ val: Int) -> Int {
guard nums.count > 0 else {return 0}
let cnt = nums.count
var left = 0, right = cnt
while left<right {
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;
}
文章来源:https://blog.csdn.net/zzl819954692/article/details/135328856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!