竞赛
考级
时间复杂度O(m longn)
我这道题很**,欢迎简化!!! 用一个结构体包括编号,腿长,以及最后能爬到的最大高度。 然后建立a数组和b数组,表示台阶高度和下一级台阶与当前这级台阶的高度差。 先输入 在给结构体排序,腿长单调递增,方便双指针 然后记录b数组,注意,第一个台阶也有高度,所以又要记录第一个台阶与地面的距离 然后双指针 最后因为可能因为l1已经到头,但l2仍为到头,所以剩下的一定在最顶端,直接等与a[n] 最后按编号输出 完整版!知道你不爱看前面的
时间复杂度:O(m log m+n) 先对所有人进行一次排序(高度降序排列) 在对台阶高度和人进行遍历(双指针) 当人不能跨越该层台阶时保存答案 否则台阶++;
我们把台阶的差值求出来,这样能不能爬到这个台阶,只需要确认前面所有台阶差值的最大值就可以了,拿c数组来存值。然后我们用优先队列来存腿长和他的下标位置。开始从大往小进行选择,当我队列里的值大于最大的差值,我就可以跨到这个台阶,如果不大于,说明队列里的其他元素也不可能大于,因为优先队列默认腿长从大到小排序,所有我们放弃这个台阶,也就是n--,然后开始继续判断。如果判断完了队列里还有值,说明队列剩下的元素都是一个台阶也爬不动的,输出0就可以了。
提交答案之后,这里将显示提交结果~