千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  算法题(力扣)-删除排序数组中的重复项

算法题(力扣)-删除排序数组中的重复项

来源:千锋教育
发布人:qyf
时间: 2022-11-10 15:20:00

  题目描述

  给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

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

  示例 1:

  给定数组 nums = [1,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。

  你不需要考虑数组中超出新长度后面的元素。

  说明:

  为什么返回数值是整数,但输出的答案是数组呢?

  请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

  你可以想象内部操作如下:

  // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝

  int len = removeDuplicates(nums);

  // 在函数里修改输入数组对于调用者是可见的。

  // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。

  for (int i = 0; i < len; i++) {

  print(nums[i]);

  }

  题目解析

  使用快慢指针来记录遍历的坐标。

  开始时这两个指针都指向第一个数字

  如果两个指针指的数字相同,则快指针向前走一步

  如果不同,则两个指针都向前走一步

  当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数

  代码实现

1

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

类的加载机制是什么

2023-03-21

如何定义Java变量?

2023-03-14

细节决定成败:探究Mybatis中javaType和ofType的区别

2023-03-09

最新文章NEW

java实现多线程的几种方式

2023-03-21

java编程spring框架的作用

2023-03-21

什么是java中的进制

2023-03-17

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>