当前位置:   article > 正文

力扣算法11——删除有序数组的重复项(双指针算法)_removedup 力扣

removedup 力扣

代码实现:

  1. package datasSouce;
  2. public class SortArrayDuplicate {
  3. public static void main(String[] args) {
  4. System.out.println(removeDup(new int[]{0,1,2,2,2,3,3,4}));
  5. }
  6. private static int removeDup(int[] arr) {
  7. if(arr.length==0){
  8. return 0;
  9. }
  10. //慢指针
  11. int i = 0;
  12. //j位快指针
  13. for (int j = 1; j < arr.length; j++){
  14. //如果相等j就直接往后移,i还是当前位置
  15. if (arr[i] != arr[j]){
  16. //如果不相等则i加一
  17. i++;
  18. //把快指针的值符给i+1
  19. arr[i] = arr[j];
  20. }
  21. }
  22. //返回的是数组下标,所以长度需要加1
  23. return i + 1;
  24. }
  25. }

思路:

  • 不能有额外的容器因为空间复杂度位O(1)
  • 定义两个快慢指针判断元素的值(i,j)
  • 因为数组是有序的所以快慢指针的只需要判断相邻
  • i既是慢指针也是返回的长度,因为当相邻的数值相等时i不会加1
  • j的数值会赋值给i+1,以便进行连续的判断
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50479
推荐阅读
相关标签
  

闽ICP备14008679号