HHU 暑假第二弹 数据结构初步

写在前面(^_^)

  本周的训练专题是基础的数据结构,主要涉及到栈、队列(优先队列)、二叉树(二叉搜索树、完全二叉树、满二叉树)、散列(数字哈希)。


1000. 二叉搜索树(hdoj 3791)

题意

  判断两个序列是否同为一棵二叉搜索树。

题解

  这是一道很基础的纯数据结构题,数据量很小。先建立二叉搜索树(相关内容可参考该博客),然后进行先序遍历或者后序遍历,比较得到的两个序列即可。


1001. Matrix Chain Multiplication(hdoj 1082)

题意

  给出n个矩阵的行数和列数(例:A 2 3 ; B 3 4),并给出矩阵相乘运算的表达式(例:(AB)),若不可以运算输出“error”,若可以运算输出运算过程中一共发生了多少次乘法运算。

题解

  1.两个矩阵可以运算的条件A.col==B.row;
  2.采用栈stack对表示式进行模拟处理;遇到‘(’跳过,遇到字母入栈;遇到‘)’栈顶的两个矩阵出栈,并对其进行运算(一定要注意两个矩阵的先后顺序),如果可以运算,把运算结果入栈。


1002. Sliding Window(poj 2823)

题意

  有n个窗口,有一个窗口容量为k的滑动窗口,每次向右滑动一个窗口,问当前滑动窗口的最大值和最小值。

题解

  1.最多有1000000个窗口,暴力求解的复杂度为o(nk),最坏情况下可达到10的12次方,很有可能超时。
  2.采用优先队列(priority_queue)的数据结构,需存储每个窗口的value和index,使用两个优先队列,一个递增一个递减(以value大小作为比较标准)。遍历一次,若队首元素的index<=i-k,则将队首元素抛出,直至队首元素的index>i-k,则该队首元素为当前滑动窗口的最大/小值。


1003. Subtree(hdoj 5524)

题意

  求一棵完全二叉树,有多少种子树包含的节点数量不同。

题解

  1.如果一棵完全二叉树是满二叉树,则其子树依然是满二叉树;如果完全二叉树不是满二叉树,则其中一棵子树是满二叉树,另一棵是完全二叉树。
  2.基于以上两点,可以根据结点的数量,进行递归求解。


1004. Snowflake Snow Snowflakes(poj 3349)

题意

  雪花有6瓣,每瓣用一个整数表示,问有没有完全相同的两朵雪花。两朵雪花完全相同的条件是:以顺时针或者逆时针(两种顺序均可)的顺序,6瓣对应相等。

题解

  1.最多有100000朵雪花,如果以简单粗暴的方法(复杂度o(n2))可能会超时。
  2.采用数字哈希的方法,可以以(6瓣数字之和 % 较大素数)作为关键字,将雪花分类,即可降低复杂度。如果两朵雪花完全相同,则一定属于同一类(或一定具有相同的关键字)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值