class Solution {
public int furthestBuilding(int[] heights, int bricks, int ladders) {
int left = ladders;
int right = heights.length-1;
while(left <= right){
int mid = (left+right) >> 1;
if(check(heights,bricks,ladders,mid)){
left = mid + 1;
}else{
right = mid -1;
}
}
return left-1;
}

public boolean check(int[] heights,int bricks,int ladders,int n){
List<Integer> list= new ArrayList<>();
for(int i = 0;i < n;i++){
if(heights[i+1]-heights[i]>0){
list.add(heights[i+1]-heights[i]);
}
}
Collections.sort(list);

int sum = 0;
for(int i = 0;i < list.size()-ladders;i++){
sum += list.get(i);
if(sum > bricks) return false;
}
return true;
}
}

Collections.sort(list); 在这个代码中是用来对 list 中的高度差进行排序的,目的是优化使用砖块和梯子的策略。

在题目中,你需要决定如何使用砖块和梯子,以便尽可能到达最远的建筑。梯子可以跳过更大的高度差,而砖块则用于填补较小的高度差。排序的作用是为了让你首先使用砖块填补较小的高度差,以便留出梯子来应对较大的高度差。

具体来说,list 保存的是当前每个建筑之间的高度差(只有当下一个建筑比当前建筑高时才会有差值)。通过 Collections.sort(list),你将这些差值按从小到大的顺序排列。然后在接下来的循环中,你尝试先使用砖块填补较小的高度差,这样可以确保使用砖块的效率最大化。而较大的高度差则使用梯子,这样可以避免浪费梯子在较小的差距上。

举个例子:
假设你面临以下高度差:

list = [3, 5, 2, 1, 7]

排序后会变成:

list = [1, 2, 3, 5, 7]

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » leetcode可以达到最远的建筑

提供最优质的资源集合

立即查看 了解详情