LeetCode - 从排序数组中删除重复项
2018-03-05 11:49
507 查看
题目描述:
https://leetcodechina.com/explore/suan-fa/card/chu-ji-suan-fa/1/di-yi-zhang-jie/21/
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。
解题思路:
参考资料:http://www.cnblogs.com/grandyang/p/4329128.html
可以使用快慢指针,当数字相同时快指针后移,当数字不同时先移动慢指针再赋值。
那么这道题的解题思路是,我们使用快慢指针来记录遍历的坐标,最开始时两个指针都指向第一个数字,如果两个指针指的数字相同,则快指针向前走一步,如果不同,则两个指针都向前走一步,这样当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数
最终代码:
https://leetcodechina.com/explore/suan-fa/card/chu-ji-suan-fa/1/di-yi-zhang-jie/21/
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。
给定数组: nums = [1,1,2], 你的函数应该返回新长度 2, 并且原数组nums的前两个元素必须是1和2 不需要理会新的数组长度后面的元素
解题思路:
参考资料:http://www.cnblogs.com/grandyang/p/4329128.html
可以使用快慢指针,当数字相同时快指针后移,当数字不同时先移动慢指针再赋值。
那么这道题的解题思路是,我们使用快慢指针来记录遍历的坐标,最开始时两个指针都指向第一个数字,如果两个指针指的数字相同,则快指针向前走一步,如果不同,则两个指针都向前走一步,这样当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数
最终代码:
public class RemoveDuplicates { @Test public void test1() { Assert.assertEquals(1, removeDuplicates1(new int[]{1, 1, 1})); Assert.assertEquals(0, removeDuplicates1(new int[]{})); Assert.assertEquals(1, removeDuplicates1(new int[]{1})); Assert.assertEquals(2, removeDuplicates1(new int[]{1, 1, 2})); Assert.assertEquals(3, removeDuplicates1(new int[]{1, 1, 2, 2, 2, 3, 3})); Assert.assertEquals(4, removeDuplicates1(new int[]{1, 2, 3, 4, 4, 4, 4})); Assert.assertEquals(5, removeDuplicates1(new int[]{1, 2, 3, 4, 5})); } // 快慢指针 public int removeDuplicates1(int[] nums) { if (nums == null || nums.length == 0) { return 0; } int i = 0; int j = 0; for (; i < nums.length; i++) { if (nums[j] != nums[i]) { nums[++j] = nums[i]; } } return j+1; } }
相关文章推荐
- 【初级算法】1.从排序数组中删除重复项
- [LeetCode] Remove Duplicates from Sorted Array 从有序数组中删除重复项
- 两数之和,从排序数组中删除重复项
- Leetcode 从排序数组中删除重复项
- LeetCode:从排序数组中删除重复项
- LeetCode: Remove Duplicates from Sorted Array II(在排序数组中删除重复元素)
- leetcode 26 80 删除已排序数组中重复的数据
- 从排序数组中删除重复项
- C# 合并数组、排序、删除重复项最优方案
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- LeetCode 26. 从排序数组中删除重复项
- [Leetcode] Remove duplicates from sorted array 从已排序的数组中删除重复元素
- [LeetCode] 2018.3.22-从排序数组中删除重复项
- [Leetcode] Remove duplicates from sorted array ii 从已排序的数组中删除重复元素
- Leetcode-26-从排序数组中删除重复项
- leetCode 80.Remove Duplicates from Sorted Array II (删除排序数组中的重复II) 解题思路和方法
- 【Leetcode】从排序数组中删除重复元素
- leetCode 26.Remove Duplicates from Sorted Array(删除数组反复点) 解题思路和方法
- 【LeetCode】Sort Colors 数组排序
- LintCode-删除排序数组中的重复数字