zoukankan      html  css  js  c++  java
  • A1097 Deduplication on a Linked List (25分)

    一、技术总结

    1. 这一题首先设计数据结构链接结点,除了基本的地址address、数据data和指针next参数,还要一般设计一个order参数,用于记录有效结点,顺便用于满足题目要求。
    2. 设计exist数组存放是否重复出现的数字
    3. 关键点在于直接对于order的区分,重复数字之后的从maxn开始赋值,最后通过sort排序,然后输出。
    4. 然后不用考虑,下一个结点的问题,直接下个结点的地址,直接就是这个结点的指针,打印输出即可。

    二、参考代码

    #include<cstdlib>
    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn = 100010;
    struct Node{
    	int address;
    	int data;
    	int next;
    	int order = 2*maxn; 
    }node[maxn];
    bool exist[maxn] = {false};
    bool cmp(Node a, Node b){
    	return a.order < b.order;
    }
    int main(){
    	int head, n, cnt1 = 0, cnt2 = 0;
    	scanf("%d%d", &head, &n);
    	int address;
    	for(int i = 0; i < n; i++){
    		scanf("%d", &address);
    		scanf("%d%d", &node[address].data, &node[address].next);
    		node[address].address = address;
    	}
    	for(int i = head; i != -1; i = node[i].next){
    		if(exist[abs(node[i].data)] == false){
    			exist[abs(node[i].data)] = true;
    			node[i].order = cnt1++;
    		}else{
    			node[i].order = maxn + cnt2;
    			cnt2++;
    		}
    	}
    	sort(node, node+maxn, cmp);
    	int cnt = cnt1 + cnt2;
    	for(int i = 0; i < cnt; i++){
    		if(i != cnt1-1 && i != cnt-1){
    			printf("%05d %d %05d
    ", node[i].address, node[i].data, node[i+1].address);
    		}else{
    			printf("%05d %d -1
    ", node[i].address, node[i].data);
    		}
    	}
    	return 0;
    }
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    51nod 1087 1 10 100 1000(找规律+递推+stl)
    51nod 1082 与7无关的数 (打表预处理)
    51 nod 1080 两个数的平方和
    1015 水仙花数(水题)
    51 nod 1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    51 nod 1001 数组中和等于K的数对
    51 nod 1081 子段求和
    51nod 1134 最长递增子序列 (O(nlogn)算法)
    51nod 1174 区间中最大的数(RMQ)
  • 原文地址:https://www.cnblogs.com/tsruixi/p/12263968.html
Copyright © 2011-2022 走看看