第一题,给一个数组an,数组长度为n,1<=ai<=n,问在o(n)时间复杂度,o(1)空间复杂度,并且不改变数组内容的情况下判断数组中是否出现重复的数据?(提示:利用了数据的冗余位)

误区:不能求和来解,版上很多朋友都说求和,然后如果和不是(n*(n+1))/2,那就是表明有重复的,不难举出反例:如:数组{2,2,3,3},有重复的,但数组和是10==(4*(4+1))/2

第二题:给出两个数组an,bn,均递增有序,用o(n)时间复杂度求出数组an+bn中前n个大数。
(提示:按照版上讨论过的思路,采取sqrt(n)路归并,但是时间复杂度顶多也就到n*sqrt(n),o(n)算法进一步寻求中……)

第三题:无括号的表达式树,运算符可能是 +, -, *, /. 要求设计数据结构保存表达式树,然后
对给定的N个表达式树查询找到所有互相等价的。其中 表达式 a+b 和 b+a 等价, a*b
 和 b*a等价。(思路:既然不带括号,则任意表达式都是a+b-c形式,其中a,b,c是形如r*s/t的形式)

第四题:对栈加一个操作min用来求栈中最小的元素,但要求栈的push,pop,min操作的时间复杂度均为o(1)。

第五题:(数学题)设n>=4,有多少个n位二进制串,其中恰好出现了两次01?  (答案:C(n+1,5))
第六题:给一个数组a,找出其中是否存在一个元素,该元素的个数是整个数组长度的一半以上(提示:finding the majority element)
第七题:给一个数组a,找出其中的三个元素,使得该三个元素的和的绝对值最小。(时间复杂度O(n*n))
第八题:有共同尾巴的两个链,要求只用一个变量,找出公共链的第一个元素。(这个题目的一般想法是先遍历算出两个链表的长度,然后求出长度差,再让长的链表先遍历长度差后,两个链表一起走,判断是否相等,第一个相等的就是公共链的第一个元素,但是这样却需要用到两个指针,如果使用head指针的话,那就有可能将head信息丢失,所以不能这么做;另外一种办法就是:将一个链表的尾节点指向另一个链表的头指针,让他们形成一个环,那样就可以利用这个头指针和允许使用的一个变量,两个指针一起来做了,先是使用追步求出环节点)
       代码如下:
p1 = head->next;
p2 = head->next->next;

while (p1 != p2)
{
  p1 = p1->next;
  p2 = p2->next->next;
}

p1 = head;
while (p1 != p2)
{
   p1 = p1->next;
   p2 = p2->next;
}
(代码是水木算法版ttl提供,摘录在此,仅供学习!)

第九题:已知一个random函数能等概率生成0,1,2,3,4,5这五个数字,问能否利用这个函数等概率生成0,1,2,3,4,5,6,7这八个数字。
(类似的有:已知一个random能够等概率生成0,1,问能否利用该函数等概率生成(a,b)中的数。)

第十题:过桥问题
经典的过桥问题,就是有n个人,每个人过桥的速度不一样,所以过桥所需要的时间就不同,分别是ai(1<=i<=n),由于天黑,需要用手电筒,而手电筒又只有一个,同时桥窄,每次仅仅能让两个人通过,所以每次需要两人过去后,一人持手电筒返回,直到所有的人都已过河。
(这个问题的解法原则就是:当n<=3的时候,就很简单,当n>=4时,就是每次考虑怎么样把最慢和次慢的两人送过桥,有两种模式,模式一:用最快的人作为传递手电筒的人,来回接受最慢和次慢;模式二:同时用最快和次快作为传递手电筒的人,最快的送次快的,最快的传回手电筒,最慢和次慢一起过,次慢的传回手电筒。尔后比较这两种模式,采取最优的即可)

转载于:https://www.cnblogs.com/keer/archive/2007/10/26/938324.html

【转载】水木算法讨论题相关推荐

  1. 转载---KMP算法(Matrix67原创)

    如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句话说,给你两个字 ...

  2. 转载 从算法上解读自动驾驶是如何实现的?

    科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数量 ...

  3. 哈工大18年春软件构造课程讨论题

    这是哈工大18年春软件构造课程(徐汉川老师)的讨论题目,少部分答案摘录自课件PPT和网上的资源(链接在文中给出).如有错误还望指出,谢谢. 一.在软件测试过程中,"测试用例的数目" ...

  4. (转载)Knuth-Morris-Pratt算法(简称KMP)学习

    转载自:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html(作者: 阮一峰 ...

  5. matlab中partdata,[转载]meanshift算法

    Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束. 1. Meanshift推导 给定d维空间R ...

  6. [转载] Python算法

    参考链接: Python使用散列的地址计算排序 排序 冒泡算法 arr = [1, 36, 7, 102, 54] def BubbleSort(arr): n = len(arr) for i in ...

  7. [转载] 聚类算法总结

    参考链接: K means聚类Python–简介 聚类算法 文章目录 聚类算法聚类算法简介认识聚类算法聚类算法的概念聚类算法与分类算法最大的区别 聚类算法api初步使用api介绍案例 聚类算法实现流程 ...

  8. 转载——MinMax算法详解

    原地址如下: https://www.xqbase.com/computer/search_minimax.htm 原文如下: <对弈程序基本技术>专题 最小-最大搜索 Bruce Mor ...

  9. matlab语音算法,[转载]RLS算法多麦克风语音降噪( matlab编程 )

    RLS算法多麦克风语音降噪 一.课程设计的目的 综合运用信号与系统.数字信号处理.概率论.矩阵运算的知识进行语音信号的增强,利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概 ...

最新文章

  1. R语言glm模型预测(predict)过程及Error in eval(predvars, data, env) 错误原因
  2. redis bind连不上的坑
  3. 1、用Anaconda配置Windows环境下的tensorflow(CPU版本)
  4. Gradle 设置 本地maven仓库及发布mavenLocal()路径的方法
  5. $.ajax和$.load的区别
  6. 报错Submitted credentials for token did not match the expected credentials
  7. IP地址分类及CIDR划分方法
  8. 开源 免费 java CMS - FreeCMS1.3-数据对象-report
  9. 每天一个linux命令(55)--at命令
  10. java 6789的10000次方,用MSSQL计算2的10000次方
  11. vue路由钩子函数(进入和离开钩子函数)
  12. android开发-01-搭建环境
  13. 车辆运动控制(2)车辆横摆动力学建模
  14. Java快速对接微信登录
  15. latex下的实数集R的写法
  16. 转:: 刺鸟:用python来开发webgame服务端(1)
  17. 使用n2disk和PF_RING构建一个(便宜的)2×10 Gbit(连续)数据包记录器
  18. 收藏的一些有意思的网站
  19. HTML+CSS大风车及十字架的实现
  20. 造梦师的梦想是什么样的?

热门文章

  1. Syslink Control使用技巧
  2. Delphi格式化函数Format FormatDateTime和FormatFloat
  3. CentOs基础操作指令(文件目录类)
  4. Invitation Cards(建反图 + 跑两遍SPFA)
  5. CREO - 基础2 - 如何让装配好的零件重新装配
  6. java接口fastjson_走进Java接口测试之fastjson指南
  7. python编程从入门到实践pdf_Python编程入门研读笔记(二)
  8. php怎么查询数据库,php怎么查询数据库
  9. 计算机教育类会议论文,中国教育和科研网(CERNET)第七届学术会议征集论文通知...
  10. android 页面icon拉伸_所有同学!注意咯!!设计师不可忽略的页面转场来咯!!...