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;
    }
};
相关推荐
lmy2012110813 分钟前
提高:图论:强连通分量 图的遍历
c++·算法·图论·强联通分量
人类群星闪耀时32 分钟前
破解 N 皇后 II:位运算的高效艺术
python·算法·数学建模
Demons_kirit34 分钟前
LeetCode 1863.找出所有子集的异或总和再求和
数据结构·算法·leetcode
竹下为生44 分钟前
LeetCode --- 443周赛
算法·leetcode·职场和发展
green5+11 小时前
LeetCode18四数之和
java·开发语言·算法
雾里看山1 小时前
算法思想之双指针(一)
算法·leetcode·推荐算法
2401_827499991 小时前
leetcode-热题100(3)
数据结构·算法·leetcode
·醉挽清风·2 小时前
学习笔记—C++—入门基础()
c语言·开发语言·c++·笔记·学习·算法
百渡ovO2 小时前
【蓝桥杯】每日练习 Day21
c++·算法·蓝桥杯
一捌年2 小时前
排序算法-插入排序
数据结构·算法·排序算法