高质量代码:算法与鲁棒性解析
1. 数组中移除数字
在处理数组中移除特定数字的问题时,有一种高效的方法。该问题不要求保留剩余数字的顺序,只关注新的长度。我们可以将数组划分为两部分,左边部分包含所有非目标值,右边部分包含待移除的目标值。
为了解决这个问题,我们定义两个指针:
- 第一个指针(记为 P1)从数组开头开始向前移动,直到遇到等于目标值的数字。
- 第二个指针(记为 P2)从数组末尾开始向后移动,直到遇到不等于目标值的数字。
然后交换 P1 和 P2 所指向的数字,重复这个移动和交换操作,直到扫描完所有目标数字。
以下是 Java 代码示例:
int remove_solution2(int numbers[], int n) {
int p1 = 0;
while(p1 < numbers.length && numbers[p1] != n)
++p1;
int p2 = numbers.length - 1;
while(p1 < p2){
while(p1 < numbers.length && numbers[p1] != n)
++p1;
while(p2 > 0 && numbers[p2] == n)
--p2;
if(p1 < p2){
numbers[p1] = numbers[p2];
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



