NO.26 删除排序数组中的重复项 简单
思路一:双指针法 题目中给了两个关键点需要特别思考”原地”和”不需要考虑数组中超出新长度后面的元素”,所谓的”原地”就是不需要创建新的数组将不重复的元素复制过去,只需要在原数组中进行”覆盖”即可;所谓”不需要考虑数组中超出新长度后面的元素”就是只需要将不重复元素都”紧凑到原数组的前面”,如:[1,1,1,2,3,3,4,6]遵循上述两个点进行”覆盖”和”紧凑”的结果[1,2,3,4,6,3,4,6],算法的返回值为新长度5。
可以用两个指针i和j分别指向0号和1号元素,如果j指向的元素和i指向的元素相等就移动j指针,如果不相等则先移动i指针再让j指向的元素覆盖此时i指向的元素最后移动j指针,直至j指针遍历完所有元素。
1 | public int removeDuplicates(int[] nums) { |
时间复杂度:O(n)
本人菜鸟,有错误请告知,感激不尽!