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后移;
依次循环,得出结果