一、知识点:
双指针
二、文字分析:
用双指针的方法,详解在代码注释中。
复杂度分析:该算法只对数组进行一次遍历,因此时间复杂度为 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; } }