首页 > 其他分享 >LeetCode26. 删除有序数组中的重复项题解

LeetCode26. 删除有序数组中的重复项题解

时间:2024-06-19 14:44:31浏览次数:25  
标签:slow nums 重复 题解 元素 fast 数组 LeetCode26

LeetCode26. 删除有序数组中的重复项题解

题目链接:

https://leetcode.cn/problems/remove-duplicates-from-sorted-array

题目描述:

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

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

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

示例:
输入: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 。不需要考虑数组中超出新长度后面的元素。

思路

以题目给出的示例而言,我们可以把数组分为两个部分:

前一部分是不重复的

后一部分是重复的,也就是该删除的。

我们可以定义快慢指针:

快慢指针的定义

[0,slow-1]代表值不重复的区域;

[slow,fast-1]代表值重复的区域;

[fast,n-1]代表未处理的区域。

循环逻辑

  1. 初始化快慢指针slow,fast,均初始化为1(注意:[0,slow-1]代表值不重复的区域,如果slow = 1[0,0]只有一个元素,肯定不重复,符合我们的规定);
  2. 如果nums[fast] 不等于 nums[slow - 1],说明遇到了不重复的元素,那么就把 nums[slow] 赋值为nums[fast],并把slow指针向后移动;
  3. fast指针向后移动

直到fast超出数组长度。

然后返回slow的值,就是所求数组长度。

代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        int slow = 1,fast = 1;
        while (fast < nums.length) {
            if(nums[fast] != nums[slow - 1]){
                nums[slow] = nums[fast];
                slow++;
            }

            fast++;
        }

        return slow;
    }
}

标签:slow,nums,重复,题解,元素,fast,数组,LeetCode26
From: https://www.cnblogs.com/nicaicai/p/18256204

相关文章

  • Vue 3中的reactive:响应式对象和数组
    ......
  • 编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并
    编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。#include<stdio.h>#defineMAX100intisPrime(intnum){if(num<2){return0;}for(inti=2;i*i<=num;......
  • 数组趣味玩法:在Java SE中尝试创新玩法
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的......
  • 深入探究:Java SE中的数组高级用法
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的......
  • 【C语言】数组参数和指针参数详解
    在写代码的时候难免要把【数组】或者【指针】传给函数,那函数的参数该如何设计呢?1一维数组传参#include<stdio.h>voidtest(intarr[])//ok?{}voidtest(intarr[10])//ok?{}voidtest(int*arr)//ok?{}voidtest2(int*arr[20])//ok?{}voidtest2(int**arr)//ok?......
  • python系列&AI系列:cannot import name ‘ForkProcess‘ from ‘multiprocessing.conte
    cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问题解决cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问题解决问题描述问题原因解决方案cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问......
  • 链表相对于数组的优势,以及栈和队列的基本操作
    链表(LinkedList)和数组(Array)是两种常见的数据结构,它们各自在不同的场景下有其优势和劣势。链表相对于数组的优势主要体现在以下几个方面:动态大小:链表在插入和删除元素时,不需要像数组那样预先分配固定大小的内存空间。链表中的节点可以动态地分配和释放,这使得链表在处理动......
  • CF1537F 题解
    一道结论型的图论题。约定:偶环:节点个数为偶数的环使得任意不相同两点之间有且仅有2条简单路径的环。奇环:节点个数为奇数的环使得任意不相同两点之间有且仅有2条简单路径的环。令点\(i\)的权值为\(a_i\),有\(a_i=t_i-v_i\),其中\(v_i,t_i\)为题目给出的。称一个图为好......
  • 2023年10月 00023高等数学(工本)真题解析
    说明2023年10月00023高等数学(工本)真题解析单选题在空间直角坐标系中,点(1,1,0)在(A)A.Oxy平面B.Oxz平面C.Oyz平面D.z轴极限\(\lim\limits_{x\rightarrow0\atopy\rightarrow3}xsin\dfrac{1}{xy}=\)(A)A.0B.1C.3D.不存在解:\[x\rightarrow0,y\rightarrow3时x\r......
  • 【前端面经】数组算法题解
    目录题目一:两数之和题目二:最长无重复字符子串题目三:合并两个有序数组题目四:寻找数组中的峰值题目一:两数之和描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。......