哈理工oj Hrbustacm 1287 数字去重和排序II(STL 或着 hash 拉链法)

水题 STL map也能过,但是为了练习拉链hash

/*=============================================================================
#
#      Author: liangshu - cbam
#
#      QQ : 756029571
#
#      School : 哈尔滨理工大学
#
#      Last modified: 2015-08-26 18:36
#
#     Filename: C.cpp
#
#     Description:
#        The people who are crazy enough to think they can change the world, are the ones who do !
=============================================================================*/

#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
const int M = 1007;
struct Node{
    int d;
    Node * next ;
};
Node * pnd[M + 1];
Node nd[M +1];
int n_cnt;
int a[1000 + 18];
int a_cnt;

int main(){
    int n, d, p;
    while(scanf("%d",&n) != EOF){
         memset(pnd, 0, sizeof(pnd));
 n_cnt = 0;
a_cnt = 0;
for(int i = 0; i < n; i++){
    scanf("%d",&d);
    p = d % M;
    bool found = false ;
    Node *pt = pnd[p];
    while(pt){
        if(pt -> d == d){
            found = true;
            break;
        }
        pt = pt -> next;
    }
    if(!found){
        nd[n_cnt].d = d;
        nd[n_cnt].next = pnd[p];
        pnd[p] = &nd[n_cnt];
        n_cnt ++;
        a[a_cnt++] = d;
    }
}
sort(a, a + a_cnt);
printf("%d\n%d", a_cnt, a[0]);
for(int
        i = 1; i < a_cnt; ++i){
    printf(" %d",a[i]);
}
printf("\n");
    }
return 0;
}

AC2:

#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
int main(){
    int n;
    set<long long > cnt;
    while(scanf("%d",&n) != EOF){
        for(int i = 1; i <= n; i++){
          int x;
          scanf("%lld",&x);
            cnt.insert(x);
        }
        set<long long > ::iterator it = cnt.begin();
    cout<<cnt.size()<<endl;

        printf("%lld",*it);
        it++;
        for(;  it != cnt.end(); it++){
            cout<<" "<<*it;
        }
           cout<<endl;
           cnt.clear();
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 13:46:31

哈理工oj Hrbustacm 1287 数字去重和排序II(STL 或着 hash 拉链法)的相关文章

hlg1287数字去重和排序II【hash】

大意: 告诉你n个数让你把其中重复的数字保留一个并且排序输出 分析: 每读入一个数若未出现过就把这个数存起来 昨天re无数次原因是输出的时候我是先输出的第一个然后把每个依次输出 这就有一个问题就是如果只有一个元素的还要访问第一个元素从而造成re 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace

经典算法题-数字去重与排序

现有N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序 Python实现方式如下 while True: try: a = int(input()) res = set() for i in range(a): res.add(int(input())) for i in sorted(res): print(i) except: break 原文地址:https://www.cnblog

二叉树的建立与遍历(山东理工OJ)

数据结构实验之二叉树的建立与遍历 题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include <iost

数组去重及排序/0~10随机数字/字符串中出现最多的字符及次数

数组去重及排序: var arr = [1,5,1,2,6,8,1,81,9,0]; for(var i=0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i] == arr[j]){ arr.splice(j,1); j--; } } } arr.sort(function(a,b){ return a-b; // 从小到大排序 }) alert(arr); // 0,1,2,5,6,8,9,81 arr.sort(fu

11:去重并排序

11:题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作. Input Param n               输入随机数的个数 inputArray      n个随机整数组成的数组 Return Value OutputA

华为往年笔试题【去重和排序】【vertor二维数组,迭代器】

题目:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理). Input Param n               输入随机数的个数 inputArray      n个随机整数组成的

数组的合并,去重,排序

一,两个数组的合并去重: var arr1 = ['a','b']; var arr2 = ['a','c','d']; var arr3 = [1,'d',undefined,true,null]; //合并两个数组,去重 var concat_ = function(arr1,arr2){ //不要直接使用var arr = arr1,这样arr只是arr1的一个引用,两者的修改会互相影响 var arr = arr1.concat(); //或者使用slice()复制,var arr =

LeetCode OJ:Pascal&#39;s TriangleII(帕斯卡三角II)

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. 还是帕斯卡三角,只不过这里指定的是某一个特定的层,然后直接返回,这个就可以使用从后往前更新数组的方法,其实I也可以用这个方法来做的,只不过当时没想到啊,代码如下: 1 class Solution { 2 public: 3 vector<int> getRow(int rowInde

对数据库表中的某一字段去重分组排序

1.问题背景    某数据库t_tab_ab中有两个字段a和b,如下所示:    查询前:                 查询后:    a     b                  a     b    1     2                  1     2    1     3                  2     3    1     4                  3     4    1     5    2     3    2     4    2