Day 3

第二十六题:

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

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

来源:力扣(LeetCode)

1、可以定义两个指针 i 和 j ,i指向数组下标0,j指向数组下标1;

  判断此时 i 和 j 所指向的数据是否相同;

  如果相同,则 j 后移一位,如果不同,则将 i++,再把 j 指向的数据复制到 i 位置上;

  依次循环,最后返回 i+1 个数的数组元素。、

  

2、还可以用另一种非双指针的方法,可以定义一个参数 len 来记录两者之间的重复个数,当在遇到下一个不同的元素时,将这个元素向前移动 len 位。

  

第283题:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。(来自LeetCode)

1、用两个指针 i 和 j 指向首位,

  然后用 i 下标遍历整个数组,当遇见nums[i]不等于 0 时,将i和j下标所指元素交换;(若首位都不为0,此时i和j上的元素交换无意义,只有当它们同时指向为0时,它们才会错开)

  循环下去,最后得出结果。

   

2、用i和j指向数组0下标,(遍历数组,当遇见不为0的数,将其移到前面,下标后移)

  利用i遍历数组,一开始i和j都指向0下标,当此元素为0时,i后移;

  直到当i下标指向的元素不为0时,将该元素赋给j下标元素;j后移;

  依次循环,得出结果

  

posted @ 2020-06-15 17:24  Liang-Yi  阅读(106)  评论(1编辑  收藏  举报