两道有趣的算法题(只有思路)
2017-06-13 09:33
537 查看
1、一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。(网易)
思路:看上去很复杂的题目,其实真的超级简单。取max{a1,l-an,t}。a1为最左边的灯到起点的距离,l-an为最右边的灯到终点的距离,t为相邻两灯的距离排序后的最大值的一半。稍微思考一下就知道原因了。
2、给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 。(完美世界)
思路:设一个辅助数组用来记录以对应元素结尾的最大递增子序列的长度(即lis[i]表示以array[i]结尾的最大递增子序列长度为lis[i]),从头到尾扫一遍原数组,对于每个元素,以其结尾的最大递增子序列长度要么为1,要么为这个元素前面的元素中小于该元素且最大递增子序列长度最大的那个元素对应的最大递增子序列长度+1。即if(array[i]>array[j] && lis[j]+1>lis[i]) {
lis[i] = lis[j] + 1; }
(这道题还有优化的方案,我只以我的思路来讲。。。)
以上~~
思路:看上去很复杂的题目,其实真的超级简单。取max{a1,l-an,t}。a1为最左边的灯到起点的距离,l-an为最右边的灯到终点的距离,t为相邻两灯的距离排序后的最大值的一半。稍微思考一下就知道原因了。
2、给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 。(完美世界)
思路:设一个辅助数组用来记录以对应元素结尾的最大递增子序列的长度(即lis[i]表示以array[i]结尾的最大递增子序列长度为lis[i]),从头到尾扫一遍原数组,对于每个元素,以其结尾的最大递增子序列长度要么为1,要么为这个元素前面的元素中小于该元素且最大递增子序列长度最大的那个元素对应的最大递增子序列长度+1。即if(array[i]>array[j] && lis[j]+1>lis[i]) {
lis[i] = lis[j] + 1; }
(这道题还有优化的方案,我只以我的思路来讲。。。)
以上~~
相关文章推荐
- 算法---K个最小和(讲解的思路不清晰)
- C语言:一个有趣的算法总结。
- 百度的两道算法题--插入排序的变形
- 有趣的分油算法
- 腾讯笔试题_电梯问题_思路和初步的算法_討論一下
- 经典算法面试题及解题思路
- 区域生长算法的思路整理
- 并查集算法(有趣的讲解)
- 两道概率算法题
- 【一道有趣的Twitter技术面试题】的个人思路
- 两道面试中的算法题
- 关于二十四点游戏的编程思路与基本算法
- 有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
- 【算法】随机算法和双随机的实现思路
- iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
- AVL树的算法思路整理
- 美团面试的两道算法题
- 腾讯2015实习校招-整形长度算法思路实现
- 【常用算法思路分析系列】栈和队列高频题集(修改版)
- 常见算法基础题思路简析(三)-二叉树篇