首页 > 其他分享 >Leetcode 26 删除数组重复项

Leetcode 26 删除数组重复项

时间:2024-01-19 11:23:24浏览次数:27  
标签:26 nums int 题解 元素 数组 长度 Leetcode

题目描述

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

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

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

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案
int k = removeDuplicates(nums); // 调用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过。

示例1:

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
示例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 。不需要考虑数组中超出新长度后面的元素。

提示:

\(1 <= nums.length <= 3 * 10^4\)
\(-10^4 <= nums[i] <= 10^4\)
nums 已按 非严格递增 排列

解题

一开始打算用桶排序做,但是这样一来我只能调用erase函数,导致最后是\(O(n^2)\)的时间复杂度,需要60ms左右 ,后来看到快慢指针,确实不失为一种很妙的方法,特此记录

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
     int n=nums.size();
     int slow=0,fast=1;
     if(n==0) return 0;
     else{
        while (fast<n)
        {
            if(nums[slow]!=nums[fast]){nums[slow]=nums[fast];
            slow++;fast++;}
            else fast++;
        }
        
     }
     return slow;
    }
};

标签:26,nums,int,题解,元素,数组,长度,Leetcode
From: https://www.cnblogs.com/oxidationreaction/p/17974242

相关文章

  • 数组的逆排序
    include<stdio.h>//实现函数初始化数组为全0voidInit(intarr[],intsz){inti=0;for(i=0;i<sz;i++){arr[i]=0;}}//打印数组的每个元素voidPrint(intarr[],intsz){inti=0;for(i=0;i<sz;i++){printf("%d",arr[i]);}printf(&qu......
  • datawhale-leetcode打卡:001-012题
    这次这十二个题目属于是极限肝出来的,有两个参考了一下题解,还是很有意思。我会按照我个人的感觉去写这个东西。螺旋矩阵(leetcode054)这个题目比较恶心的就是跑圈的过程怎么描述。首先,顺时针一圈下来是先从左到右,顶到最右边i<m,好再往下,顶到最下边i<n,好现在i--往回排,最后j--走完一......
  • 代码随想录 day23 修剪二叉搜索树 将有序数组转换为二叉搜索树 把二叉搜索树转换为累
    修剪二叉搜索树这道题不能直接写删除代码因为要涉及父子关系的保留如这样是暴力删掉不符合区间的节点但是没有保留父子关系这里我们把不符合区间的节点通过一个临时节点传递出来然后在外面合适方向接住具体怎么接住的呢其实就是对于root来说左边子树抛出的节点就会......
  • 912.排序数组--归并排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1归并排序思路归并排序利用了分治的思想来对序列进行排序。对一个长为n的待排序的序列,我们将其分解成两个......
  • 数组的运用和方法的运用
    ##对reduce等基础的数组方法无法熟练组合运用constmovements=[200,450,-400,3000,-650,-130,70,1300];constlabelSumIn=document.querySelector('.summary**value--in');constlabelSumOut=document.querySelector('.summary**value--out');constl......
  • JavaScript数组使用方法
    constarr=[4,3,2,1];/*操作数组*///在末尾添加元素arr.push(5);//结果:[4,3,2,1,5]//在开头添加元素arr.unshift(0);//结果:[0,4,3,2,1,5]//移除最后一个元素arr.pop();//结果:[0,4,3,2,1]//移除第一个元素arr.shift();//结果:[4,3,2......
  • 数组篇-其之一-数组的概念与一维数组
    本文中使用到的工具是IntellijIDEA和JDK8,需要安装两款工具的小伙伴请查看这两篇教程:点我查看安装JDK8教程、点我查看安装IntellijIDEA教程。假设我想在某宝上买一点零食(没错,我承认我确实是个吃货),经过搜索后出现了如下结果,我们发现每一项都包含相同内容:图片、标题、价格、购......
  • 1480.一维数组的动态和
    1.题目介绍给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的动态和。示例1:输入:nums=[1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为[1,1+2,1+2+3,1+2+3+4]。示例2:输入:nums=[1,1,1,1,1]输出:[1,2,3,4,5]......
  • 560.和为k的数组
    1.题目介绍给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3],k=3输出:2提示:1<=nums.length<=2*104-1000<=nums[i]<=......
  • LeetCode 第 121 场双周赛
    LeetCode第121场双周赛大于等于顺序前缀和的最小缺失整数代码:classSolution{public:intmissingInteger(vector<int>&nums){intn=nums.size();set<int>s;for(autox:nums){s.insert(x);}......