首页 > 试题广场 >

删除排序数组中的重复项

[编程题]删除排序数组中的重复项
  • 热度指数:1050 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

 

不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。


输入描述:
给定数组nums = [1,1,2],

输入格式为[1,1,2]


输出描述:
函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1, 2。

你不需要考虑数组中超出新长度后面的元素。
示例1

输入

[1,1,2]

输出

2
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    char c;
    vector<int> nums;
    cin>>c;
    while(cin>>n>>c){
        nums.push_back(n);
        if(c==']') break;
    }
    nums.erase(unique(nums.begin(),nums.end()),nums.end());
    cout<<nums.size()<<endl;
}

//利用erase与unique直接去重,再输出长度。

发表于 2020-04-27 21:36:31 回复(0)
def delete_num(nums):
    if len(nums)<2:
        return len(nums)
    i = 0
    for j in range(1,len(nums)):
        if nums[i] != nums[j]:
            i += 1
            nums[i] = nums[j]
        j += 1
    return i+1

nums = list(map(int,input()[1:-1].split(',')))
print(delete_num(nums))

## 题目是排序数组

发表于 2020-03-26 10:40:44 回复(0)
A=input().strip('[').strip(']').split(',')
A.sort()
c=0
for i in range(len(A)-1):
    if A[i]!=A[i+1]:
        c+=1
print(c+1) 

发表于 2021-06-04 16:15:45 回复(0)
print(len(set(input()[1:-1].split(','))))

发表于 2020-08-14 20:31:37 回复(0)
代码1
#include<iostream>
(720)#include<vector>
using namespace std;
int main(){
    int n;
    char c;
    vector<int> nums;
    cin>>c;
    while(cin>>n>>c) nums.emplace_back(n);
    if(nums.size()==0) return 0;
    int res=1,first=0;
    for(int i=0;i<nums.size()-1;i++){
        if(nums[i]!=nums[i+1]){
            if(first!=0){
                nums[first]=nums[i+1];
                first++;
            }
            res++;
         }
        if(nums[i]==nums[i+1]&&first==0)  first=i+1;
    }
    cout<<res;
    return 0;
}
代码2
#include<iostream>
(720)#include<vector>
using namespace std;
int main(){
    int n;
    char c;
    vector<int> nums;
    cin>>c;
    while(cin>>n>>c) nums.emplace_back(n);
    if(nums.size()==0) return 0;
    int i=0;
    for(int j=1;j<nums.size();j++){
        if(nums[j]!=nums[i]){
            i++;
            nums[i]=nums[j];
        }
    }
    cout<<i+1;
    return 0;
}


发表于 2020-03-16 22:19:04 回复(0)
def solution():
    nums = [int(num) for num in input()[1:-1].split(',')]
    if len(nums) <= 1:
        return len(nums)
    dif = nums[0]
    res = 1
    for i in range(1, len(nums)):
        if nums[i] != dif:
            dif = nums[i]
            nums[res] = dif
            res += 1
    return res
print(solution())
发表于 2020-03-15 11:02:26 回复(0)
function test(arr){
    return [...new Set(arr)].length
}
console.log(test([1,1,2]))
发表于 2020-02-26 15:45:27 回复(0)
list_str = input()
list_int = [int(i) for i in list_str[1:-1].split(",")]
contrast = 0
len_list = len(list_int) - 1
for i in range(len_list):
    if i - contrast > len(list_int) - 1:
        break
    if list_int[i - contrast] in list_int[i+1-contrast:]:
        list_int.pop(i-contrast)
        contrast += 1
print(len(list_int))
发表于 2020-02-26 11:49:37 回复(0)
#include <cstdio>
(802)#include <iostream>
#include <cstring>
(803)#include <queue>
#include <algorithm>
using namespace std;
 
int num[10005];
 
int main()
{
    int i = 0;
    char c;
    cin >> c;
    cin >> num[i++] >> c;
    while (cin >> num[i] >> c)
    {
        if (num[i] != num[i - 1])
        {
            i++;
        }
    }
    cout << i;
    return 0;
}

发表于 2020-02-25 23:34:55 回复(0)
#include <iostream>
(720)#include <string>
using namespace std;
 
int main(){
    string str;
    cin >> str;
     
    string tmp;
    int begin = 1, end = 1;
    int count = 0;
    while (end < str.length()){
        while (str[end] >= '0' && str[end] <= '9')
            end++;
        if (tmp.compare(str.substr(begin, end-begin)) != 0){
            tmp = str.substr(begin, end-begin);
            count++;
        }
        end ++;
        begin = end;
    }
    cout << count;
    return 0;
}

发表于 2020-02-24 16:18:47 回复(0)