一、知识点:
双指针
二、文字分析:
用双指针的方法,详解在代码注释中。
复杂度分析:该算法只对数组进行一次遍历,因此时间复杂度为 O(n),其中 n 是数组的长度。算法只使用了常数个额外变量,空间复杂度为 O(1)。
三、编程语言:
java
四、正确代码:
public class Solution {
/**
* 计算各个位置上牛群数量的有序分布
*
* @param nums int整型一维数组,表示牛群的位置数组
* @return int整型,重新分布的数组的长度
*/
public int remove_duplicates_v3(int[] nums) {
if (nums.length == 0) {
return 0;
}
int i = 0; // 指向数组中当前牛群位置
int count = 1; // 当前位置上的牛群数量
for (int j = 1; j < nums.length; j++) {
if (nums[j] == nums[j - 1]) {
// 如果当前位置与前一个位置相同
if (count < 3) {
// 如果当前位置上的牛群数量未满 3 头,则将牛群移动到数组中
nums[++i] = nums[j];
count++;
}
} else {
// 如果当前位置与前一个位置不相同
// 将牛群移动到数组中,并重置计数器
nums[++i] = nums[j];
count = 1;
}
}
// 返回重新分布的数组长度
return i + 1;
}
}

京公网安备 11010502036488号