leetcode26.删除有序数组中的重复项

简介: leetcode26.删除有序数组中的重复项

题目链接

题目描述

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


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


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

返回 k 。


示例一:


输入:nums = [1,1,2]

输出:2, nums = [1,2,_]

解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。


示例二:


输入:nums = [0,0,1,1,1,2,2,3,3,4]

输出:5, nums = [0,1,2,3,4]

解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

2.png

3.png





解题思路

双指针实现去重操作,解题思路如下:


1.如果数组长度小于等于 1,则直接返回数组长度即可。

2.初始化两个指针 i 和 j ,分别指向数组头部和第二个元素。

3.循环遍历数组,如果 nums[j] 等于 nums[i] ,则将 j 指针向后移一位;如果 nums[j] 不等于 nums[i] ,则将 nums[j] 复制到 nums[i+1] 的位置上,并将 i 和 j 指针同时向后移动一位。

4.遍历结束后,从 nums 数组的前 i+1 位即为去重后的数组,返回值为 i+1 即可。


解题代码如下:

int removeDuplicates(int* nums, int numsSize){
    int i = 0,j = 1;
    while(j<numsSize)
    {
        if(nums[i]==nums[j])
        {
            j++;
        }
        else
        {
            i++;
            nums[i] = nums[j];
            j++;
        }
    }
    return i+1;
}

4.png

目录
相关文章
|
14天前
|
存储 C语言
Leetcode—— 删除排序数组中的重复项——C语言
Leetcode—— 删除排序数组中的重复项——C语言
|
8天前
|
存储 搜索推荐
题目----力扣--合并两个有序数组
题目----力扣--合并两个有序数组
14 0
|
14天前
|
存储 搜索推荐 C语言
Leetcode—合并两个有序数组—C语言
Leetcode—合并两个有序数组—C语言
|
22天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
14 0
|
22天前
leetcode代码记录(有序数组的平方
leetcode代码记录(有序数组的平方
13 0
|
22天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
18 0
|
22天前
【力扣】80.删除有序数组中的重复项Ⅱ
【力扣】80.删除有序数组中的重复项Ⅱ
|
22天前
【力扣】26.删除有序数组中的重复项
【力扣】26.删除有序数组中的重复项
|
22天前
|
存储 算法
【力扣】88. 合并两个有序数组
【力扣】88. 合并两个有序数组
|
22天前
【力扣】26. 删除有序数组中的重复项
【力扣】26. 删除有序数组中的重复项