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;
    }
};
相关推荐
黑菜钟14 小时前
代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和
c++·算法·leetcode
Yingjun Mo15 小时前
1. 统计推断-ALMOND收敛性分析
人工智能·算法·机器学习
海梨花15 小时前
CSP认证练习题目推荐 (1)
算法·深度优先·csp
在未来等你15 小时前
Elasticsearch面试精讲 Day 15:索引别名与零停机更新
大数据·分布式·elasticsearch·搜索引擎·面试
2301_7816686115 小时前
Redis 面试
java·redis·面试
天上的光15 小时前
大模型——剪枝、量化、蒸馏、二值化
算法·机器学习·剪枝
pzx_00116 小时前
【LeetCode】14. 最长公共前缀
算法·leetcode·职场和发展
self_myth16 小时前
算法与数据结构实战技巧:从复杂度分析到数学优化
算法
程序新视界16 小时前
在职场,尽量不要成为这样的“人才”
面试·求职
小奋斗16 小时前
以Chrome 为代表的浏览器架构详解
面试·程序员