本文共 1380 字,大约阅读时间需要 4 分钟。
双向指针,res保存结果数组长度,初始化为1,第一个数肯定位于子数组之中
人家最优解比你concise的地方就在于利用了该数组是排序数组的条件!!
public class Solution { public int removeDuplicates(int[] nums) { if (nums.length < 2) { return nums.length; } int res = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] != nums[i - 1]) { nums[res++] = nums[i]; } } return res; }}
最优解:
public class Solution { public int removeDuplicates(int[] nums) { int i = 0; for (int n : nums) { if (i < 1 || n > nums[i - 1]) { nums[i++] = n; } } return i; }}
如果允许保存最多两个重复数字呢?
记录一个当前重复个数
public class Solution { public int removeDuplicates(int[] nums) { int res = 1; int cur = 1; int count = 1; while (cur < nums.length) { if (nums[cur] == nums[cur - 1] && count < 2) { count++; nums[res++] = nums[cur]; } else if (nums[cur] != nums[cur - 1]) { nums[res++] = nums[cur]; count = 1; } cur++; } return res; }}
最优解:
public class Solution { public int removeDuplicates(int[] nums) { int i = 0; for (int n : nums) { if (i < 2 || n > nums[i - 2]) { nums[i++] = n; } } return i; }}
转载地址:http://fvhld.baihongyu.com/