DAY 10 查重计数与删除元素

算法提高 6-9删除数组中的0元素

资源限制
时间限制:1.0s 内存限制:512.0MB
  编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。
  输入时首先读入数组长度,再依次读入每个元素。
  将调用此函数后得到的数组和函数返回值输出。
样例输入
7
2 0 4 3 0 0 5
样例输出
2 4 3 5
4

难度较低,不说废话,直接上代码

AC代码

#include<stdio.h>
int main()
{
	int n,i,a[100000],y=0;
	scanf("%d",&n);
	for (i = 0; i < n; i++)
		scanf("%d",&a[i]);
	for (i = 0; i < n; i++)
	{
		if (a[i] != 0)
		{
			printf("%d ", a[i]);
			y++;
		}
	}
	printf("\n");
	printf("%d",y);
	return 0;
}

算法训练 明明的随机数

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
  输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
  N
  第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
  输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例输入
10
20 40 32 67 40 20 89 300 400 15
样例输出
8
15 20 32 40 67 89 300 400
题目来源
  计13李震摘编自NOIP06PJ01

PS.emmm,本题先排序再查重删元素就只用一层循环,写起来舒服一些

AC代码

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
	int n,i,a[100000],cnt=0;
	scanf("%d",&n);
	for (i = 0; i < n; i++)
		scanf("%d",&a[i]);
	sort(a, a + n);
	for (i = 0; i < n; i++)
	{
		if (a[i] != a[i + 1])
			cnt++;
	}
	printf("%d\n",cnt);
	for (i = 0; i < n; i++)
	{
		if (a[i] != a[i + 1])
			printf("%d ",a[i]);
	}
	return 0;
}

最后一个需要用到许多库函数,以后有机会汇总整理一下

算法提高 11-2删除重复元素

资源限制
时间限制:10.0s 内存限制:256.0MB
问题描述
  为库设计新函数DelPack,删除输入字符串中所有的重复元素。不连续的重复元素也要删除。
  要求写成函数,函数内部使用指针操作。
样例输入
1223445667889
样例输出
13579
样例输入
else
样例输出
ls
数据规模和约定
  字符串数组最大长度为100。

AC代码如下:

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
map <char, int>a;
vector<char>b;
int main()
{
	string s;
	cin >> s;
	for (int i = 0; i < s.size(); i++)
	{
		if (!a[s[i]])
		{
			b.push_back(s[i]);
			a[s[i]] = 1;
		}
		else
			b.erase(find(b.begin(), b.end(), s[i]));
	}
	for (int i = 0; i < b.size(); i++)
		cout << b[i];
	return 0;
}

小结:经过了10天的学习,收获了许多皮毛,如果接下来还想刷题势头不减的话,就只能开始补习一些算法提高的知识点了。还有两个月,希望自己可以取得好成绩吧,加油。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值