首页 > 试题广场 >

有序数组去重

[编程题]有序数组去重
  • 热度指数:694 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

    给定一个字符串,字符串是有序的整数集合,逗号相连,移除相同的数字,使每个数字只出现一次,输出最终的数字个数。


输入描述:
1,2,2


输出描述:
2
示例1

输入

1,2,2

输出

2
示例2

输入

0,0,1,1,1,2,2,3,3,4

输出

5

备注:
有序整数字符串集合请在控制台一行内完成输入,并用英文逗号(,)相隔,如:1,2,2
因为是有序的序列,所以只要检查到相邻的元素不相等,计数就加1,数据类型都不用转,也不需要额外的存储空间。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] seq = br.readLine().trim().split(",");
        int count = 1;
        for(int i = 1; i < seq.length; i++)
            if(!seq[i].equals(seq[i - 1])) count ++;
        System.out.println(count);
    }
}
用集合进行去重,python一行也可以解决
print(len(set(input().split(','))))

编辑于 2021-07-20 11:47:39 回复(0)
对这个题拓展了一下,可以输出最后的数(示例如上)。用链表整出来的,指针数组理论上应该也可以,本人是刚入门的小白各位大佬要是有其它更简单有效的方法欢迎讨论分享在下不胜感激,一起学习进步!(C)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
	char crr[32];
	struct node* next;
}link;
link* head()//创建头节点
{
	link*p=(link*)malloc(sizeof(link));
	strcpy(p->crr,"-1");
	p->next=NULL;
	return p;
}
int add(link*p,char* arr)//入表
{
	link*ptem=p;
	while(ptem->next!=NULL)//将指针移动到要最后节点
	{
		ptem=ptem->next;
	}
	   if(strcmp(ptem->crr,arr)==0)//将最后节点数据和传入数据对比,如果相同则不入
	   {
	   return 0;
	   }
	link*pnew=(link*)malloc(sizeof(link));//节点放在链表最后
	strcpy(pnew->crr,arr);
	ptem->next=pnew;
	pnew->next=NULL;
	return 0;
}
int main()
{
	char str[128]={0},arr[32]={0};
		link*p=head();
		 link*ptemp=p;
	scanf("%s",str);

	int i,j,k=0;
	for(i=0;str[i]!='\0';i++)
	{
		j=0;
		while(str[i]!=','&&str[i]!='\0')//将一段数字暂时存放在arr
		{
			arr[j]=str[i];
			j++;
			i++;
		}
		add(p,arr);
	}
	while(ptemp->next!=NULL)//遍历打印测试(可以遍历输出最后结果,相当于是对这个题的拓展了)
	{
        k++;
		ptemp=ptemp->next;
		//printf("%s\n",ptemp->crr);
	}
    printf("%d\n",k);
	return 0;
}

编辑于 2021-10-09 18:38:43 回复(1)
看着下面大神的代码不断优化学习!
发表于 2021-04-24 21:00:55 回复(0)
importjava.util.Arrays;
importjava.util.HashSet;
importjava.util.Scanner;
 
publicclassMain {
    publicstaticvoidmain(String[] args) {
        Scanner sc = newScanner(System.in);
        String str = sc.next();
        String[] s = str.split(",");
        HashSet<String> strings = newHashSet<String>(Arrays.asList(s));
        System.out.println(strings.size());
         
    }
}
发表于 2021-09-15 16:45:37 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String[] str=br.readLine().split(",");
        Set<String> set=new HashSet<>();
        for(int i=0;i<str.length;i++){
            set.add(str[i]);
        }
        System.out.println(set.size());
    }
}

发表于 2021-08-22 22:04:40 回复(0)
python只需要3行......
nums = input().split(',')
nums = set(nums)
print(len(nums))
发表于 2021-06-03 10:12:24 回复(0)
s=input().strip().split(',')
us=[]
for i in range(len(s)):
    if s[i] not in us and s[i]!=',':
        us.append(s[i])
print(len(us))  

发表于 2021-05-24 11:20:47 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String arg[]){
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int count = 0;
        String[] split = str.split(",");
        for (int i = 0; i < split.length-1; i++) {
            if (split[i].equals(split[i+1])){
                count++;
            }
        }
        System.out.println(split.length-count);
    }
}

发表于 2021-04-27 12:46:40 回复(0)