博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]26. Remove Duplicates from Sorted Array I&II
阅读量:2784 次
发布时间:2019-05-13

本文共 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/

你可能感兴趣的文章
JSON过滤去掉handler
查看>>
异常的分类
查看>>
自定义异常
查看>>
方法覆盖和异常
查看>>
MFC消息映射机制
查看>>
手工进行消息映射
查看>>
程序交互的几种方式
查看>>
JDBC的概念
查看>>
Java编程语言和JDBC
查看>>
JDBC编程的步骤
查看>>
例1:通过ODBC建立连接
查看>>
例2:通过SQLSERVER 提供的驱动程序获得连接
查看>>
例3:通过ORACLE提供的驱动程序获得连接
查看>>
例4:通过数据源获得连接
查看>>
例5:通过连接池获得连接
查看>>
java_静态代码块
查看>>
一个技术小白对java内存的看法~
查看>>
一个技术小白整理出来的for循环使用几种方法~~
查看>>
跟着小白浅谈"自动装箱及自动拆箱"
查看>>
你所不知道的“位运算及运算过程”
查看>>