每日一道算法题(5)
来源:互联网 发布:卫浴软件 编辑:程序博客网 时间:2024/06/09 03:07
移除数组中的重复元素
原题目链接:计蒜客-移除数组中的重复元素
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。
例如:数组 A = {1, 1, 2}A={1,1,2},你的程序应该输出 22 即新数组的长度,新数组为 {1, 2}{1,2}。
要求:不能新开数组分配额外的空间,即常数空间限制。
输入格式
输入一个整数 n(1 \leq n \leq 1000)n(1≤n≤1000)。
接下来一行 nn 个整数 A_i(-1000 \leq A_i \leq 1000)A
i
(−1000≤A
i
≤1000),表示数组 AA 中的每个元素。
输出格式
输出一个整数,表示新数组长度。
样例输入
5
0 0 1 1 2
样例输出
3
方法一:
#include <iostream>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) { int n; int A[2000]; int count=0; cin>>n; for(int i=0;i<n;i++){ cin>>A[i]; } for(int i=0;i<n;i++){ if( i<n-1 && A[i]==A[i+1]){ count--; } count++; } cout<<count<<endl; return 0;}
方法二:
#include <stdio.h>int main(){ /*i是循环变量,n和A[]是题目要求,x是一个临时值,用来存储 的值与A[i+1]比较,如果相等则把下一个值置空,反之将A[i+1]赋值给x count是置空的数目,用原数组长度减去置空数即为新数组长度*/ int i,n,A[1000],x,count = 0; scanf("%d",&n); for(i = 0;i < n;i++) { scanf("%d",&A[i]); } x = A[0]; for(i = 1;i < n;i++) { if(A[i] == x) { A[i] = ' '; count++; } else x = A[i]; } printf("%d\n",n-count); return 0;}
方法三:
使用set
#include <iostream>#include <set>using namespace std;int main(){ int n,i; //创建空的set对象,元素类型为int set<int> s; cin>>n; while(n--){ cin>>i; s.insert(i); } //size方法用于获取set集合类的大小,也就是set集合包含的对象的数量 cout<<s.size();}
阅读全文
0 0
- 每日一道算法题(5)
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 每日一道算法题(1)
- 每日一道算法题(2)
- 每日一道算法题(3)
- 每日一道算法题(4)
- 每日一道算法题(6)
- 每日一道算法题(7)
- 猫狗算法(每日一道算法题)
- 用栈求解汉诺塔问题(每日一道算法题)
- 生成窗口最大数值(每日一道算法题)
- 构造数组的MaxTree(每日一道算法题)
- 用栈实现队列(每日一道算法题)
- 53、jdk1.5新特性-可变参数
- [译]Java中9个处理Exception的最佳实践
- 54、jdk1.5新特性-枚举
- 55、java集合
- .net dateTime 使用总结
- 每日一道算法题(5)
- node 爬虫处理cookie,代理
- 56、java集合-Collection
- 使用ueditor实现多图片上传案例
- bzoj 4401: 块的计数(结论)
- Keyboard Row && Reverse Words in a String III
- 完整的网络通讯过程
- 57、java集合-Iterator
- Mac OS安装Docker