返回介绍

Remove Duplicates from Sorted Array II

发布于 2025-02-22 13:01:23 字数 2022 浏览 0 评论 0 收藏 0

Source

Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?

For example,
Given sorted array A = [1,1,1,2,2,3],

Your function should return length = 5, and A is now [1,1,2,2,3].
Example

题解

在上题基础上加了限制条件元素最多可重复出现两次。因此可以在原题的基础上添加一变量跟踪元素重复出现的次数,小于指定值时执行赋值操作。但是需要注意的是重复出现次数 occurence 的初始值(从 1 开始,而不是 0) 和 reset 的时机。这种方法比较复杂,谢谢 @meishenme 提供的简洁方法,核心思想仍然是两根指针,只不过此时新索引自增的条件是当前遍历的数组值和『新索引』或者『新索引-1』两者之一不同。

C++

class Solution {
public:
  /**
   * @param A: a list of integers
   * @return : return an integer
   */
  int removeDuplicates(vector<int> &nums) {
    if (nums.size() <= 2) return nums.size();

    int len = nums.size();
    int newIndex = 1;
    for (int i = 2; i < len; ++i) {
      if (nums[i] != nums[newIndex] || nums[i] != nums[newIndex - 1]) {
        ++newIndex;
        nums[newIndex] = nums[i];
      }
    }

    return newIndex + 1;
  }
};

Java

public class Solution {
  /**
   * @param A: a array of integers
   * @return : return an integer
   */
  public int removeDuplicates(int[] nums) {
    if (nums == null) return -1;
    if (nums.length <= 2) return nums.length;

    int newIndex = 1;
    for (int i = 2; i < nums.length; i++) {
      if (nums[i] != nums[newIndex] || nums[i] != nums[newIndex - 1]) {
        newIndex++;
        nums[newIndex] = nums[i];
      }
    }

    return newIndex + 1;
  }
}

源码分析

遍历数组时 i 从 2 开始,newIndex 初始化为 1 便于分析。

复杂度分析

时间复杂度 O(n)O(n)O(n), 空间复杂度 O(1)O(1)O(1).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文