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

题目

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

您在真实的面试中是否遇到过这个题?

Yes

样例

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。

分析

对排序数组去重,要求空间复杂度为O(1)

遍历一次数组,将不重复元素保留,重复元素被覆盖,最后删除末尾剩余的元素即可。

Python代码

#
#100 删除排序数组中的重复数字
#
class Solution:
    """
    @param A: a list of integers
    @return an integer
    """
    def removeDuplicates(self, A):
        # write your code here
        k=0
        for i in range(1,len(A)):
            if A[i] != A[k]:
                k+=1
                A[k] = A[i]

        del A[k+1:len(A)]
        return len(A)

GitHub -- Python代码

C++代码

/*
100 删除排序数组中的重复数字

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

您在真实的面试中是否遇到过这个题? Yes
样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
*/

class Solution {
public:
    /**
     * @param A: a list of integers
     * @return : return an integer
     */
    int removeDuplicates(vector<int> &nums) {
        // write your code here
        if(nums.empty())
        {
            return 0;
        }//if

        int n = nums.size(),k=0;

        for(int i=1;i<n;++i)
        {
            if(nums[i] != nums[k])
            {
                nums[++k] = nums[i];
            }//if
        }//for
        nums.resize(k+1);
        return k+1;
    }
};

GitHub -- C++代码

时间: 2024-10-28 21:52:51

LintCode(100)删除排序数组中的重复数字的相关文章

100. 删除排序数组中的重复数字

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]. 这种简单难度的题要训练到第一时间想到解法,先上一个丑的不行的解法 1 int removeDuplicates(vector<int> &nums) { 2 // write your code here 3 if(nums.empty()){ 4

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

题目 跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]. 分析 与上题思路相同,只需要增加一个记录元素出现次数的变量即可,限制最多出现2次. Python代码 class Solution: """ @param A: a list of integers @return an integer &q

删除排序数组中的重复数字、买卖股票的最佳时机、爬楼梯

题目1:删除排序数组中的重复数字 描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 题目2:买卖股票的最佳时机 描述:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 题目3:爬楼梯 描述:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶

删除排序数组中的重复数字1

System.out.println("删除数组中重复元素后数组的长度为:"+a); } public static int  removeDuplicates(int[] nums) { int count=0; if (nums.length==0 ||nums.length==1) return -1; else { Arrays.sort(nums); for(int i=0;i<nums.length-1;i++) { if(nums[i]!=nums[i+1]) {

LintCode_100 删除排序数组中的重复数字 ||

题目 跟进“删除重复数字”: 如果可以允许出现两次重复将如何处理? 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]. C++代码 1 int removeDuplicates(vector<int> &nums) { 2 // write your code here 3 if(nums.size() == 0) return 0; 4 int i,j; 5 int count = 1; 6 for(i = 1,j = 1; i

101. 删除排序数组中的重复数字 II

跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 在丑的不行的原基础代码上加了个count 1 int removeDuplicates(vector<int> &nums) { 2 // write your code here 3 if(nums.empty()){ 4 return 0; 5 } 6 vector<int>::iterator it=nums.begin(); 7 it++; 8 int mark=nums[0]; 9

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

public class Solution {    /**     * @param A: a array of integers     * @return : return an integer     */    public static int removeDuplicates(int[] nums) {          int a = 1;          int l = nums.length;          if(l == 0)              return

删除排序数组中的重复数字 - Java

public class Solution {    /**     * @param A: a array of integers     * @return : return an integer     */    public int removeDuplicates(int[] nums) {        // write your code here    int i,j=0,l;    l=nums.length;    if(l==0)    {        return l

题目1:删除排序数组中的重复数字

#include "stdafx.h"#include<iostream>using namespace std;#include<vector> int del(vector<int>& nums){ int n=nums.size(); if(n==0) return 0; if(n==1) return 1; int m=0; for(int i=1;i<n;i++){ if(nums[m]!=nums[i]){ nums[++m