乘风破浪:LeetCode真题_026_Remove Duplicates from Sorted Array
乘风破浪: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的更多相关文章
- 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array
乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言 将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...
- 【算法】LeetCode算法题-Remove Duplicates from Sorted Array
这是悦乐书的第149次更新,第151篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第8题(顺位题号是26).给定一个已经排序(由小到大)的整数数组(元素可以重复),计算其 ...
- 乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays
乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays 一.前言 说到算法,最难的就是一些需要通过分析得到一些递推公式或者有用的结论,进而用来解决问题的方法了. ...
- 【一天一道LeetCode】#80. Remove Duplicates from Sorted Array II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
- [Leetcode][Python]26: Remove Duplicates from Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 26: Remove Duplicates from Sorted Array ...
- LeetCode(26)题解:Remove Duplicates from Sorted Array
https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the ...
- leetcode笔记:Remove Duplicates from Sorted Array II
一.题目描写叙述 二.解题技巧 这道题和Remove Duplicates from Sorted Array这道题是相似的.仅仅只是这里同意出现反复的数字而已,能够採用二分搜索的变种算法.仅仅只是增 ...
- 【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...
- 【LeetCode】080. Remove Duplicates from Sorted Array II
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...
随机推荐
- git第五节--git branch--分支管理
@git branch :查看当前仓库所有分支,及当前所处的分支 @git branch XXX:创建分支XXX @git checkout XXX:切换到分支XXX下 @git checkout - ...
- es6学习笔记4--数组
数组的扩展 Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据 ...
- jQuery获取动态产生的html内标签或元素
下午分享<MVC编辑状态两个DropDownList联动>http://www.cnblogs.com/insus/p/3426563.html 不久,马上有网友问及三级联动的例子.Ins ...
- Lightning Chart 8.4版新功能
LightningChat V8.4版在如下功能上做了改进 边距 缩放功能 Legend box 的自动定位 正投影 相机orientation与rotation系统 全新3D 坐标空间转换器 Poi ...
- 【Linux】rpm常用命令及rpm参数介绍
RPM是RedhatPackageManager的缩写,是由RedHat公司开发的软件包安装和管理程序,同Windows平台上的Uninstaller比较类似.使用RPM,用户可以自行安装和管理Lin ...
- 设计模式——适配器模式(type-c转3.5mm耳机口)
本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处. 本文简述适配器模式,考虑到java中没有多继承就只写了对象适配器模式,然后例子是怎么用转接口把3.5mm耳机插在 ...
- Saving HDU(hdu2111,贪心)
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 2017 年 PHP 程序员未来路在何方
PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...
- RocketMQ 消息存储
消息存储 主要的存储文件: 1.消息文件(commitLog) 2.消息消费队列文件(consumeQueue) 3.Hash索引文件(IndexFile) 4.检测点文件(checkpoint) 5 ...
- IDEA创建Struts2报错——web.xml
这里记录一个问题,用IDEA创建Struts2时会出现的错误,cannot resolve class or package ‘filter’,出现在web.xml文件中,不修改这个,那么你配置好了T ...