LeetCode OJ Remove Duplicates from Sorted Array II
2016-06-01 19:27
627 查看
Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array nums =
Your function should return length =
【题目分析】
在前一个题目的基础上,这个题目稍微做了变化。上一个题目中每一个数字只能出现一次,在这个题目中每一个数字允许出现两次。
【思路】
回忆一下,在Remove Duplicates from Sorted Array这个题目中,一个巧妙的方法就是设置了两个下标 i 和 j,i 用来遍历数组,j 用来指示数组中不重复元素最后一个元素的位置。那么同样在这个题目中我们也设置这样两个变量,指示此时的 j 用来指示数组中重复次数不超过2的元素最后的位置。我们怎么知道一个元素重复出现的次数呢?难道要设置一个变量来记录当前元素重复出现了多少次吗?一个很巧妙的办法就是比较当前元素nums[i] 是否和前前一个元素 nums[j-1] 相同,如果不相同则nums[++j] = nums[i],否则的话当前元素出现次数肯定是大于2次了,继续向后遍历数组即可。
这个过程如下:
j = 1; i = 2;
num[i] 等于 nums[j -1]; i++;
nums[i] 不等于 nums[j -1]; nums[++j] = nums[i]; i++;
num[i] 不等于 num[j -1]; nums[++j] = nums[i]; i++;
num[i] 等于 num[j -1] ; i++;
num[i] 不等于 num[j -1]; nums[++j] = nums[i];
【java代码】
What if duplicates are allowed at most twice?
For example,
Given sorted array nums =
[1,1,1,2,2,3],
Your function should return length =
5, with the first five elements of nums being
1,
1,
2,
2and
3. It doesn't matter what you leave beyond the new length.
【题目分析】
在前一个题目的基础上,这个题目稍微做了变化。上一个题目中每一个数字只能出现一次,在这个题目中每一个数字允许出现两次。
【思路】
回忆一下,在Remove Duplicates from Sorted Array这个题目中,一个巧妙的方法就是设置了两个下标 i 和 j,i 用来遍历数组,j 用来指示数组中不重复元素最后一个元素的位置。那么同样在这个题目中我们也设置这样两个变量,指示此时的 j 用来指示数组中重复次数不超过2的元素最后的位置。我们怎么知道一个元素重复出现的次数呢?难道要设置一个变量来记录当前元素重复出现了多少次吗?一个很巧妙的办法就是比较当前元素nums[i] 是否和前前一个元素 nums[j-1] 相同,如果不相同则nums[++j] = nums[i],否则的话当前元素出现次数肯定是大于2次了,继续向后遍历数组即可。
这个过程如下:
j = 1; i = 2;
num[i] 等于 nums[j -1]; i++;
nums[i] 不等于 nums[j -1]; nums[++j] = nums[i]; i++;
num[i] 不等于 num[j -1]; nums[++j] = nums[i]; i++;
num[i] 等于 num[j -1] ; i++;
num[i] 不等于 num[j -1]; nums[++j] = nums[i];
【java代码】
public class Solution { public int removeDuplicates(int[] nums) { if (nums.length <= 2) return nums.length; int j = 1; for(int i=2; i<nums.length; i++) { if (nums[j-1] != nums[i]) nums[++j] = nums[i]; } return j+1; } }
相关文章推荐
- Codeforces Round #324 (Div. 2) A
- 显示Unicode 字节的对应字符的小技巧
- 第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
- android使用代码生成LayerDrawable的方法、源码分析和注意事项
- Android 中的线程调度
- Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)
- Android系统权限那些事
- bitmap.setPixels()方法及自己理解
- zzulioj-1877 蛤玮打扫教室
- win10 应用商店无法联网(0x80072EFD)解决方案
- MySQL-MMM实现MySQL高可用读写分离
- 子查询
- Do Evil Things with gopher:// , Ricter · 2016/06/01 9:32
- Parcelable序列化实现方法
- 跟踪程序执行流程,在某个模块的入口
- 三种页面置换算法C实现
- JDK升级到1.7后 com.sun.image.codec.jpeg JPEGImageEncoder不存在
- redis持久化之rdb
- 火拼泡泡龙技术
- DOM---点亮星