zoukankan      html  css  js  c++  java
  • HDU 2095 find your present (2) 动态链表

    解题报告:输入一个n,后面紧跟着输入n个数,输入的这n个数中,除了有一个数的个数为奇数外,其它的数的个数都是偶数个,现在要你找出这个个数为奇数的这个数。

    看起来好像很简单的样子,不过,这题的重点不在这里,看下内存限制就知道了,只有1024KB,也就是1M,而n的范围是1000000,输入的数的范围更是在int以内,所以这题其实考的就是一个内存优化的问题。当然,这让我们很自然的联想到中数据结构-动态链表,要多少分配多少,这样就可以最大限度的减少不必要的内存消耗。很久没写动态链表了,竟然调试了很久。不过在discuss里面看到有位神牛的做法,顿时就感觉弱爆了,他的代码只有几行,原理就是利用C语言里面的 ^ (异或)运算,内存竟然只用了240KB,而我用动态链表写的内存用了280KB,还有用动态链表写一定要记得在删除节点的时候把那块内存删除,要不然还是过不过了,不过只超出40KB了。

     1 #include<cstdio>
     2 struct node {
     3     int x;
     4     node *next;
     5 };
     6 void insert(node *head,int d) {
     7     node *p = head;
     8     while(p->next != NULL) {
     9         if(p->next->x == d) {
    10             node *m = p->next;
    11             p->next = p->next->next;
    12             delete m;
    13             return ;
    14         }
    15         p = p->next;
    16     }
    17     node *q = new node;
    18     q->x = d;
    19     q->next = NULL;
    20     p->next = q;
    21 }
    22 
    23 int main() {
    24     int n,d;
    25     while(scanf("%d",&n),n) {
    26         node *head = new node;
    27         head->x = -1;
    28         head->next = NULL;
    29         while(n--) {
    30             scanf("%d",&d);
    31             insert(head,d);
    32         }
    33         printf("%d
    ",head->next->x);
    34     }
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    vue.js 第二课
    vue.js学习(第一课)
    2016-11-14看张大神的微博总结
    这几天的工作总结:
    调了一天的兼容总结下
    鸭式辩论
    prototype 原型
    前端ps常用的小技巧
    Android的开始之相对布局
    Android的开始之线性布局
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3258532.html
Copyright © 2011-2022 走看看