内容简介:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
题目描述
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路
本题解题思路与上一篇的 删除有序数组重复元素
类似,如下所示:
- 设定左右指针 i, j,变量 count 用于计数
- 指针 i 从左向右移动,判断元素是否等于 val;当于 val 相等时 count--, 并移动指针 j,当于 val 不等时指针 i 继续向右移动
- 当指针 j 移动时,判断元素是否等于 val; 当于 val 相等时 count-- 继续移动指针 j, 当不等时互换 i, j 元素并继续移动指针 i
- 当指针 i,j 交汇时完成退出轮询
可见如下图示:
实现
public int removeElement(int[] nums, int val) { int i = 0, count = nums.length, j = count; while (true) { while (i < j) { if (nums[i] == val) { count--; break; } else { if (i + 1 == j) { break; } i++; } } while (j > i) { j--; if (j == i) { break; } if (nums[j] == val) { count--; } else { nums[i] = nums[j]; i++; break; } } if (i >= j) { break; } } return count; }
以上所述就是小编给大家介绍的《LeetCode-数组-删除元素》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 交换数组元素,使得数组的和的差最小
- 求非负元素数组所有元素能组合的最大字符串
- 前端通关日记之优雅添加数组元素
- [译] 对元素持有弱引用的 Swift 数组
- [译] 对元素持有弱引用的 Swift 数组
- PHP删除数组中指定下标的元素方法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Go程序设计语言
艾伦 A. A. 多诺万 / 李道兵、高博、庞向才、金鑫鑫、林齐斌 / 机械工业出版社 / 2017-5 / 79
本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队主管Alan Donovan联袂撰写,是学习Go语言程序设计的指南。本书共13章,主要内容包括:Go的基础知识、基本结构、基本数据类型、复合数据类型、函数、方法、接口、goroutine、通道、共享变量的并发性、包、go工具、测试、反射等。 本书适合作为计算机相关专业的教材,也可供Go语言爱好者阅读。一起来看看 《Go程序设计语言》 这本书的介绍吧!