Leetcode面试经典150_Q26删除有序数组中的重复项

题目:

给你一个 非严格递增排列 的数组 nums ,请你**原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k

解题思路:双指针(快慢指针法)

Python解法:

复制代码
class Solution(object):
    def removeDuplicates(self, nums):
        slow = 0
        if len(nums)<2:
            return len(nums)
        for fast in range(1,len(nums)):
            if nums[fast]==nums[slow]:
                fast+=1
            else:
                slow+=1
                nums[slow]=nums[fast]
        return slow+1

C++解法:

复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
};
相关推荐
智者知已应修善业28 分钟前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
还不秃顶的计科生43 分钟前
LeetCode 热题 100第二题:字母易位词分组python版本
linux·python·leetcode
LYFlied1 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
多米Domi0111 小时前
0x3f 第19天 javase黑马81-87 ,三更1-23 hot100子串
python·算法·leetcode·散列表
历程里程碑1 小时前
滑动窗口最大值:单调队列高效解法
数据结构·算法·leetcode
課代表2 小时前
从初等数学到高等数学
算法·微积分·函数·极限·导数·积分·方程
ullio2 小时前
arc206d - LIS ∩ LDS
算法
等等小何2 小时前
leetcode1593拆分字符串使唯一子字符串数目最大
算法
萧曵 丶2 小时前
ArrayList 和 HashMap 自动扩容机制详解
java·开发语言·面试
王老师青少年编程3 小时前
2025年12月GESP(C++二级): 环保能量球
c++·算法·gesp·csp·信奥赛·二级·环保能量球