算法与数据结构——终结篇(一)

这段时间从“算法与数据结构”公众号获得了很多不错的算法题目,博客里面也存了好多。由于时间有限,这个系列就不再做重点更新了,以后只把自己觉得不错的题目放到终结篇里面。后续重点放在看过的算法书籍上面,准备把书上面的习题好好做一做。终结篇一共五篇博客,会慢慢不定时更新,这是第一篇博客。

算法题1:Hankson趣味问题

题目:Hankson趣味问题
Time Limit: 1000ms Memory Limit: 65536KB
(出自:SmartOJ1012)

描述Descript.

Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。

今天在课堂上,老师讲解了如何求两个正整数c1和c2的最大公约数和最小公倍数。现在Hankson认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x满足:1、 x和a0的最大公约数是a1;2、 x和b0的最小公倍数是b1。

Hankson的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x的个数。请你帮助他编程求解这个问题。

输入Input
第一行为一个正整数n,表示有n组输入数据。接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证a0能被a1整除,b1能被b0整除。

输出Output
共n行。每组输入数据的输出结果占一行,为一个整数。
对于每组数据:若不存在这样的x,请输出0;
若存在这样的x,请输出满足条件的x的个数;

样例Sample

输入数据
2
41 1 96 288
95 1 37 1776
输出数据
6
2
样例说明
  第一组输入数据,x 可以是9、18、36、72、144、288,共有6 个。
  第二组输入数据,x 可以是48、1776,共有2 个。
数据规模和约定
  对于 50%的数据,保证有1≤a0,a1,b0,b1≤10000 且n≤100。
  对于 100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。
  

****************************************************************************************************************************************

算法题 99: B 树和 B+ 树

题目:下列关于 B 树和 B+ 树的叙述中,哪一条是不正确的?()

A.相同数据量的 B+ 树比 B 树需要使用更多存储空间
B.B树和B+ 树都可用于文件的索引结构
C.B 树和 B+ 树都能有效地支持顺序检索
D.B 树和 B+ 树都能有效地支持随机检索

****************************************************************************************************************************************

算法题 100:快速售票系统的座位登记

题目:为了提供全程对号(考虑长途、短途旅客情况下,每一位旅客在上车到下车期间都有独立座位)的快速售票系统,铁路公司设计了基于内存的系统。适合描述一个车次车票情况的数据结构是()
A、用数组描述座位,数组描述每个座位的售票情况
B、用数组描述座位,链表描述每个座位的售票情况
C、用链表描述座位,数组描述每个座位的售票情况
D、用链表描述座位,链表描述每个座位的售票情况

****************************************************************************************************************************************

算法题 106:手机号归属地查询

题目:手机号的前7位能唯一缺点号码归属地。如果现在有 2000万手机号码,需要设计一个应用查询给定手机号码的归属地,那么满足需求的最高效存储方案是()
A、hashtable
B、B+树
C、数组
D、分布式NoSQL数据库
E、其它(请补充说明)

****************************************************************************************************************************************

****************************************************************************************************************************************

算法题 107:大型文件查找最接近Key的1000条记录

题目:假设你要查找一个大型文件,不是查找相等的,而是找出最接近于一个给定Key的1000条记录。最接近的意义是:对于某个给定的距离函数d,这1000条记录的d(Ki, K)值为最小。对于这样一个顺序查找,以下数据结构中最为适合的是__
A、双端队列
B、二叉堆
C、二叉查找树
D、平衡树
E、B树
F、其它(请补充说明)

****************************************************************************************************************************************

算法题 108:字符串空格替换

题目
请实现一个函数,将一个字符串中的空格替换成“%20”。

例如,当字符串为 Hello World C++ 则经过替换之后的字符串为 Hello%20Word%20C++

请描述你的思路并给出时间复杂度!

****************************************************************************************************************************************

算法题 125:确定字符互异

题目:请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。

给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
测试样例:
“aeiou”,返回:True
“BarackObama”,返回:False

****************************************************************************************************************************************

算法题 126:最小调整有序

题目:有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。

给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。

测试样例
[1,4,6,5,9,10],6 返回:[2,3]

****************************************************************************************************************************************

算法题 137:求最小生成树的算法

(不定项选择题)以下哪些算法是可以用来求最小生成树()
A、kruskal算法
B、dijkstra算法
C、floyd算法
D、prim算法

****************************************************************************************************************************************

****************************************************************************************************************************************

你可能感兴趣的:(数据结构和算法)