LeetCode 26: Remove Duplicates from Sorted Array
来源:互联网 发布:java数据结构与算法题 编辑:程序博客网 时间:2024/06/06 12:00
本博客与RayXXZhang的博客保持同步更新,转载请注明来自RayXXZhang的博客-LeetCode 26: Remove Duplicates from Sorted Array
题目
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums =[1,1,2]
,Your function should return length =
2
, with the first two elements of nums being1
and2
respectively. It doesn’t matter what you leave beyond the new length.
解题思路
这道题是一道简单题,通过比较容易,但是不同解法还是存在着一些效率差别的。
解法一
解法一判断在相邻的两个数相等的情况下,后面的所有数字往前移位,虽然能通过,但是效率较低,时间复杂度O(n^2)。
public class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; int unique = len; for(int i = 0; i < unique - 1;) { if(nums[i] == nums[i + 1]) { for(int j = i + 1; j < unique; ++j) { nums[j - 1] = nums[j]; } --unique; } else { ++i; } } return unique; }}
解法二
解法二将重复的数字填充成Integer.MAX_VALUE
,然后再最后对数组进行排序即可,解法二使用最后的排序代替了遍历中的不断移位
时间复杂度O(nlogn),优于解法一
public class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; int unique = len; for(int i = 0; i < len - 1; ++i) { if(nums[i] == nums[i + 1]) { nums[i] = Integer.MAX_VALUE; --unique; } } Arrays.sort(nums); return unique; }}
解法三
解法三使用了两个游标,分别指向当前不重复的尾部和要进行比较的头部,当两者不同时,将比较的头部的数复制到当前不重复的尾部的后一个位置,
该解法只需要一次遍历,无需而外的排序,时间复杂度O(n),是最优解法。
public class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; int i = 0; for(int j = 1; j < len; ++j) { if(nums[i] != nums[j]) { ++i; nums[i] = nums[j]; } } return i + 1; }}
- LeetCode(26)Remove Duplicates From Sorted Array
- [leetcode 26] Remove Duplicates from Sorted Array
- [Leetcode] 26 - Remove Duplicates from Sorted Array
- leetcode|26|Remove Duplicates from Sorted Array
- leetcode-26 Remove Duplicates from Sorted Array
- leetcode 26 Remove Duplicates from Sorted Array
- LeetCode 26 Remove Duplicates from Sorted Array
- LeetCode 26 Remove Duplicates from Sorted Array
- LeetCode 26 Remove Duplicates from Sorted Array
- leetcode 26 Remove Duplicates from Sorted Array
- LeetCode---(26) Remove Duplicates from Sorted Array
- Leetcode 26 Remove Duplicates from Sorted Array
- LeetCode 26 - Remove Duplicates from Sorted Array
- Leetcode[26]-Remove Duplicates from Sorted Array
- leetcode 26 -- Remove Duplicates from Sorted Array
- LeetCode 26: Remove Duplicates from Sorted Array
- leetcode[26]:Remove Duplicates from Sorted Array
- leetcode 26 Remove Duplicates from Sorted Array
- codevs1482【路线统计】
- Data Structures And Problem Solving Using Java (Fourth Edition)中译版(Java 继承篇)
- ios autolayout代码布局
- 无线轮播
- POJ Ultra-QuickSort 逆序数 树状数组 归并排序
- LeetCode 26: Remove Duplicates from Sorted Array
- 找出数组中的最小值--递归实现
- 巴什博弈_poj2368
- 【SSME】java.lang.IllegalStateException: Failed to load ApplicationContext
- Java自定义比较器实现中文排序
- Data Structures And Problem Solving Using Java (Fourth Edition)中译版(Java 修饰词与可见性)
- HTML窗体指南
- Redis3.0与Jedis2.7.2 客户端与Spring整合
- SPARK排序算法,使用Scala开发 二次排序 自定义KEY值,相比JAVA的罗嗦,Scala优雅简洁!!!