乘风破浪:LeetCode真题_026_Remove Duplicates from Sorted Array

一、前言

    我们这次的实验是去除重复的有序数组元素,有大体两种算法。

二、Remove Duplicates from Sorted Array

2.1 问题

     题目大意理解,就是对数组进行元素去重,然后返回去处重复之后的长度,无论我们对数组做了什么的修改,都没有关系的,只要保证再返回的长度之内的数组正确性即可。因为最后是根据长度来遍历的,因此我们不用担心。

2.2 分析与解决

     题目说的很清晰了,因此,我们首先想到了笨办法,那就是从左往右遍历,如果发现相等的元素,就将后面的元素集体前移,这样最差的时间复杂度是O(n~2)。因此我们想想有没有简单的方法,于是我们想到了只用找一个指针在前面开路,遇到不同的元素了,将这个元素填到相应的位置,然后继续搜索,直至遍历完所有的元素即可,这样一次遍历就能解决问题,时间复杂度O(n~2),只不过也留下了脏空间,不过题目说了不用我们管了,于是问题解决。

     第一种是笨办法:

public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}

   第二种是一次遍历:

public class Solution {
/**
*
* 题目大意
* 给定一个排序的数组,将数组中的重复元素去掉,相同的只保留一个作为新数组的元素,
* 并且返回数组新的元素个数,
* 不要创建一个新的数组来保存结果。在常量时间内解决这个问题
*
* 解题思路
* 从第二个元素开始处理,记为当前处理的元素,如果当前元素与他的前一个元素相同就删除这个元素,
* 如果不同就将它移动到正确的位置,返回最后数组元素个数。
*/
public int removeDuplicates(int[] A) { if (A.length == 0) {
return 0;
} int index = 0;//[0,index]只记录数组中出现的按从小到大的唯一一个数,已经排好序了
int next = 1; // 算法思想:找index之后的比A[index]大的数,如是找到就移动到A[index+1]处,
// index移动到下一个位置,next移动到下一个位置,再找比A[index]大的数 while (next < A.length) {
while (next < A.length && A[index] == A[next]) { // 找不等于数组中最
next++;
} if (next < A.length) {
index++;
A[index] = A[next];
next++;
}
}
return index + 1;
}
}

三、总结

将O(n~2)的复杂度下降一个等级,其实就是简单的利用了一些技巧和思维,但是节省而来的大量的运算时间。

乘风破浪:LeetCode真题_026_Remove Duplicates from Sorted Array的更多相关文章

  1. 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array

    乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言     将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...

  2. 【算法】LeetCode算法题-Remove Duplicates from Sorted Array

    这是悦乐书的第149次更新,第151篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第8题(顺位题号是26).给定一个已经排序(由小到大)的整数数组(元素可以重复),计算其 ...

  3. 乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays

    乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays 一.前言 说到算法,最难的就是一些需要通过分析得到一些递推公式或者有用的结论,进而用来解决问题的方法了. ...

  4. 【一天一道LeetCode】#80. Remove Duplicates from Sorted Array II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...

  5. [Leetcode][Python]26: Remove Duplicates from Sorted Array

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 26: Remove Duplicates from Sorted Array ...

  6. LeetCode(26)题解:Remove Duplicates from Sorted Array

    https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the ...

  7. leetcode笔记:Remove Duplicates from Sorted Array II

    一.题目描写叙述 二.解题技巧 这道题和Remove Duplicates from Sorted Array这道题是相似的.仅仅只是这里同意出现反复的数字而已,能够採用二分搜索的变种算法.仅仅只是增 ...

  8. 【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)

    Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...

  9. 【LeetCode】080. Remove Duplicates from Sorted Array II

    题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...

随机推荐

  1. 开启Centos网卡失败的解决办法

    虚拟机安装了Centos,使用ip addr命令查看网卡,但是ens33没有ip地址,按照网上说的,修改ens33网卡的配置文件: vi /etc/sysconfig/network-scripts/ ...

  2. es6学习笔记8--Map数据结构

    Map Map结构的目的和基本用法 JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是只能用字符串当作键.这给它的使用带来了很大的限制. var data = {} ...

  3. POJ 1679 The Unique MST(判断最小生成树是否唯一)

    题目链接: http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its min ...

  4. 原本在滴滴只负责批100万元以上开支的Leslie决定,ofo所有30万元以上的开支都要由她亲自过目。那段时间,他“天天晚上12点才下班,眼睛都熬红了”

    戴威即将28岁了,熟悉他的人更愿意用“孩子”来形容他. 这样的特质,在追随者眼中,是天真.纯粹.理想主义:在合作伙伴眼中,是倔强高傲.不可一世:在投资人眼中,则是任性狂妄,一味蒙眼狂奔.他像个无意间闯 ...

  5. vue-router 知识点记录

    vue-router参数传递   1.在vue-router中,有两大对象被挂载到了实例this2.$route(只读.具备信息的对象).$router(具备函数功能).例:获取query用 this ...

  6. 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr

    1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ...

  7. 【Java基础】6、java中使用switch-case的用法及注意事项超全总结

    1.switch-case注意事项: switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte.short.int.char.还有枚举:需要强调的是:long和Strin ...

  8. Java的策略模式

    策略模式也是我们经常使用的模式,它的定义如下:将可变的部分从程序中抽象分离出来成为算法接口,在该部分下分别封装一系列算法实现并使它们可以相互替换. 举个例子,我们现在有三种支付方式:支付宝支付,微信支 ...

  9. Java面试题—初级(9)

    139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...

  10. 总结:独立开发 jar 包组件——功能主要是支持查询数据库的所有表数据

    前言:开发完一个项目,必定总结,这次就将总结记录在博客,第一次开发组件 jar 包,包含前端,后台,中间遇到好多问题,这里一一描述.转载请注明出处: https://www.cnblogs.com/y ...