首页 > 其他分享 >leetcode26. 删除有序数组中的重复项(简单)

leetcode26. 删除有序数组中的重复项(简单)

时间:2022-11-16 18:55:54浏览次数:73  
标签:删除 nums 重复 元素 int 数组 leetcode26

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

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

 

示例 1:

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

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 升序 排列
 1 class Solution {
 2     public int removeDuplicates(int[] nums) {
 3       if(nums == null || nums.length == 0) return 0;
 4     int p = 0;
 5     int q = 1;
 6     while(q < nums.length){
 7         if(nums[p] != nums[q]){
 8             nums[p + 1] = nums[q];
 9             p++;
10         }
11         q++;
12     }
13     return p + 1;
14     }
15 }

 

题目思路:

因为数组是有序的,那么重复的元素一定会相邻。

要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。

考虑用 2 个指针,一个在前记作 p,一个在后记作 q,算法流程如下:

1.比较 p 和 q 位置的元素是否相等。

如果相等,q 后移 1 位 如果不相等,将 q 位置的元素复制到 p+1 位置上,p 后移一位,q 后移 1 位 重复上述过程,直到 q 等于数组长度。

返回 p + 1,即为新数组长度。

标签:删除,nums,重复,元素,int,数组,leetcode26
From: https://www.cnblogs.com/xiaowangaixuexi/p/16897141.html

相关文章

  • VUE对象数组,和普通数组的常用方法
    在VUE中也可以使用find,findIndex,map等方法对数组对象进行查询,赋值等操作,记录一下定义数组对象 vararrobj=[{"id":1,"keyword":"羽绒服","times":1000},{"id":2,"k......
  • Counting Rectangles(二维数组前缀和)
    题目链接题目描述:Youhave\(n\)rectangles,the\(i\)-threctanglehasheight\(h_i\)andwidth\(w_i\).Youareasked\(q\)queriesoftheform\(h_sw_sh_b......
  • 1047. 删除字符串中的所有相邻重复项
    1047.删除字符串中的所有相邻重复项给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继......
  • 基础树状数组
    树状数组:利用数组下标的二进制关系,构造一种类似于树形的结构,有点像一个变成树形的前缀和可以实现单点修改、区间修改、区间查询等操作2的整数n次幂的位置就是表示该位置......
  • 「Java数据结构」手撕数组队列及环形数组队列。
    目录​​一、队列​​​​1、基本介绍​​​​2、示意图​​​​3、队列的特点​​​​二、数组模拟队列​​​​1、数组队列初始化​​​​2、判断方法​​​​3、增删改查......
  • Day6-3 多维数组
    二维数组多位数字可以看称是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组二维数组: inta[][]=newint[2][5] 以上的二维数......
  • Day6-2 数组的使用:for,for-each循环,作为方法参数,作为返回值
    数组的使用普通For循环For-Each循环数组做方法入参数组做返回值 packagecom.kuang.array;​//for-each循环publicclassArrayDemo04{publicstatic......
  • 多线程下带事务的删除大量数据引起的锁等待超时
    @Override@Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)//我建议不要用这个注解,他是声明式事务粒度过大,建议用使用编程式事务,可控性......
  • 判断数组的6种方法
    说明一下:数组是属于object类型的,也就是引用类型,所以不能使用typeof来判断其具体类型。下面这些方法是判断数组的几种方法1.instanceof运算符letarr=[1,2,3];cons......
  • 数组处理方法——filter
    数组处理方法——filter()一、作用filter用于对数组进行过滤。它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。二、语法Array.filter(functi......