乘风破浪: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)的复杂度下降一个等级,其实就是简单的利用了一些技巧和思维,但是节省而来的大量的运算时间。

原文地址:https://www.cnblogs.com/zyrblog/p/10222147.html

时间: 2024-11-29 12:38:10

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

leetcode第一刷_Remove Duplicates from Sorted Array II

水题. 我之前说过包含至多几个至少几个的问题都比较难,这个题可是让我大脸了.至多可以重复一次,那就重复次数多于两次再计算重复,否则的话像普通的数据一样直接按照重复次数前移就可以了嘛.不过说归说,这种inspace的思想还是有些用处的,数组这种实现方式致命的缺点就是删除或者添加中间的元素代价太大,因为不好把握数据的最终位置.这个题是一种情况,合并两个排序好的数组也是一个例子. class Solution { public: int removeDuplicates(int A[], int n)

Leetcode 线性表 Remove Duplicates from Sorted Array II

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Remove Duplicates from Sorted Array II Total Accepted: 10649 Total Submissions: 35325 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For example, Given sorte

Leetcode 线性表 Remove Duplicates from Sorted Array

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Remove Duplicates from Sorted Array Total Accepted: 14789 Total Submissions: 46601 Given a sorted array, remove the duplicates in place such that each element appear only once and return the new l

leetcode_80题——Remove Duplicates from Sorted Array II(两个指针)

Remove Duplicates from Sorted Array II Total Accepted: 38480 Total Submissions: 125235My Submissions Question Solution Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For example,Given sorted array A = [1,1,1,2,2,

leetcode 题解:Remove Duplicates from Sorted Array II(已排序数组去三次及以上重复元素)

题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For example,Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2,3]. 说明: 1)设个标志可实现 实现: 1 class Solution { 2 public

leetcode 题解:Remove Duplicates from Sorted Array(已排序数组去重)

题目: Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array A

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

https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this

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

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 26: Remove Duplicates from Sorted Arrayhttps://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the duplicates in place such that each element appear

leetcode笔记:Remove Duplicates from Sorted Array II

一.题目描述 二.解题技巧 这道题和Remove Duplicates from Sorted Array这道题是类似的,只不过这里允许出现重复的数字而已,可以采用二分搜索的变种算法,只不过加入了剔除和第一个元素相同的元素的过程.另一个思路是加入一个变量,用于记录元素出现的次数.这题因为是已经排序的数组,所以一个变量即可解决.如果是没有排序的数组,则需要引入一个hash表来记录出现次数. 三.示例代码 class Solution { public: int RemoveDuplicatesFr