您的位置:首页 > 其它

两道有趣的算法题(只有思路)

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; }

(这道题还有优化的方案,我只以我的思路来讲。。。)

以上~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: