026 删除排序数组中的重复项

15人阅读 评论(0) 收藏 举报
分类:

LeetCode 第二十六题 删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2]
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

遍历一遍数组,如果当前数字和之前的数字相同,则将其删除,然后将后续数组元素向前移动。

Java

    public static int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0||nums.length==1)
            return nums.length;
        int current_location = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[current_location] == nums[current_location - 1]) {
                for (int j = current_location; j < nums.length - 1; j++) {
                    nums[j] = nums[j + 1];
                            } else {
                current_location++;
            }
        }
        return current_location;
    }

C++

class Solution
{
public:
    int removeDuplicates(vector<int>&nums)
    {
        if(nums.size()==0||nums.size()==1)return nums.size();
        int current_location=1;
        for(int i=1; i<nums.size(); i++)
        {
            if(nums[current_location]==nums[current_location-1])
            {
                for(int j=current_location; j<nums.size()-1; j++)
                {
                    nums[j]=nums[j+1];
                }
            }
            else
            {
                current_location++;
            }
        }
        return current_location;
    }
};

Python

组后一组测试未通过,因为超时了。有待改进。

class Solution(object):
    def removeDuplicates(self, nums):
        if len(nums) == 0 or len(nums) == 1:
            return len(nums)
        current_position = 1
        for i in range(len(nums)):
            if nums[current_position] == nums[current_position - 1]:
                for j in range(current_position, len(nums) - 1):
                    nums[j] = nums[j + 1]
            else:
                current_position += 1
                if current_position >= len(nums):
                    break
        return current_position

网上看到了更加巧妙的算法,整个时间复杂度只有O(n),它主要是使用了两个坐标i和j,一个跑的快一点,一个跑的慢一点,下面是其代码,学习学习。

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;
}
查看评论

【LeetCode】【数组】【简单】【从排序数组中删除重复项】

题目转载自https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/ 解法: /**...
  • qq_39643614
  • qq_39643614
  • 2018-03-20 18:14:47
  • 127

LeetCode 从排序数组中删除重复项

给定一个有序数组,删除重复内容,使每个元素只出现一次,并返回新的长度。不要为其他数组分配额外的空间,您必须通过在 o(1)额外的内存中修改输入数组来实现。例如:nums[]={5 5 5 6 7 7 ...
  • youyoulanyouyou
  • youyoulanyouyou
  • 2018-03-15 21:56:24
  • 65

Leetcode从排序数组中删除重复项

介绍 给定一个有序数组,删除重复内容,使每个元素只出现一次,并返回新的长度。 不要为其他数组分配额外的空间,您必须通过在 O(1)额外的内存中就地修改输入数组来实现这一点。例: 给定nums =...
  • a3060858469
  • a3060858469
  • 2018-04-01 23:05:17
  • 33

Leetcode-26-从排序数组中删除重复项

Given a sorted array, remove the duplicates in-place such that each element appear only once and r...
  • m0_37591251
  • m0_37591251
  • 2017-11-30 17:31:53
  • 2154

【Leetcode】从排序数组中删除重复元素

题目:给定一个排序的数组,删除重复的位置,使每个元素只显示一次并返回新的长度。 不要为另一个数组分配额外的空间,您必须使用常量内存来进行此操作。例如, 给定输入数组nums = [1,1,2],您的...
  • lizhidefengzi
  • lizhidefengzi
  • 2017-04-16 16:10:00
  • 1478

从排序的数组中删除重复项

题目描述: 给定一个排序数组,删除重复的位置,使每个元素只出现一次并返回新的长度。不要为另一个数组分配额外的空间,必须使用常量内存来执行此操作。 例如,给定输入数组nums = [1,1,2],你...
  • birduncle
  • birduncle
  • 2017-03-21 13:37:02
  • 434

【LintCode】删除排序数组中的重复数字

删除排序数组中的重复数字  描述: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件...
  • a417484830
  • a417484830
  • 2017-06-09 21:11:46
  • 437

从排序数组中删除重复项

    闲来无事从网上找了一些题目做一下,于是就想把它写成博文发出去。    https://leetcode-cn.com/explore/interview/card/top-interview-...
  • u012371712
  • u012371712
  • 2018-03-24 12:58:14
  • 91

LintCode(100)删除排序数组中的重复数字

题目 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 您在真实的面试中是否遇到...
  • fly_yr
  • fly_yr
  • 2016-05-31 20:10:37
  • 7108

容易 删除排序数组中的重复数字

Remove Duplicates from Sorted Array -- LeetCode 分类: LeetCode2014-02-27 05:12 4789人阅读 评论(5) 收藏 举...
  • witnessai1
  • witnessai1
  • 2015-10-17 17:57:13
  • 1919
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 4845
    积分: 516
    排名: 9万+
    博客专栏
    最新评论