关注
解决第三题时的方法和leetcode上45.Jump Game II也很像,都是用到了贪心的思想。 先说leetcode上的那道题,初始化lastMax = 0, curMax = 0两个指针,每次遍历i <= lastMax的所有nums[i]的值,并计算i+nums[i](相当于计算每个i能到达的最大位置下标)取最大的那个,进而更新curMax和lastMax指针。注意当lastMax>=length-1时就得到最终跳跃的步数,而当某一次的while循环中lastMax == curMax说明不可能跳到数组最后一个下标。代码如下: class Solution {
public int jump(int[] nums) {
if(nums == null || nums.length <= 1){
return 0;
}
int step = 0, lastMax = 0, curMax = 0, i = 0;
while(lastMax < nums.length-1){
while(i <= lastMax && i < nums.length){
curMax = Math.max(curMax, i+nums[i]);
i += 1;
}
if(lastMax == curMax){
return -1;
}
step += 1;
lastMax = curMax;
}
return step;
}
} 再说这道题,将每个炮塔的控制范围按照起始点排序以后,每次遍历list.get(i).start <= end(当前区间终点)的所有区间,取终点最大的那个,进而更新end。注意当某一次的while循环中出现end < list.get(i).start的情况时返回-1(这也就是为什么要按照起点排序,因为后面i+1、i+2……的start会更大),另外当遍历结束后的那个end小于l时也返回-1。代码如下: import java.util.Scanner;
import java.util.*;
public class Main {
public static class Pair{
int start, end;
public Pair(int s, int e){
this.start = s;
this.end = e;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int answer = 0;
int n = sc.nextInt();
int l = sc.nextInt();
List<Pair> list = new ArrayList<Pair>();
for(int i = 0; i < n; i++){
int s = sc.nextInt();
int e = sc.nextInt();
Pair p = new Pair(s, e);
list.add(p);
}
Collections.sort(list, new Comparator<Pair>() {
@Override
public int compare(Pair o1, Pair o2) {
if(o1.start != o2.start){
return o1.start - o2.start;
}else{
return o1.end - o2.end;
}
}
});
if(n == 1){
if(list.get(0).start>0 || list.get(0).end<l){
System.out.println(-1);
}else{
System.out.println(1);
}
}else{
int start = list.get(0).start;
int end = list.get(0).end;
if(start > 0){
System.out.println(-1);
}else{
answer += 1;
int i =1;
while(i < n){
if(end >= l){
System.out.println(answer);
return;
}
if(end < list.get(i).start){
System.out.println(-1);
return;
}
int newEnd = -1;
while(i < n && list.get(i).start <= end){
newEnd = Math.max(list.get(i).end, newEnd);
i += 1;
}
answer += 1;
end = newEnd;
}
if(end < l){
System.out.println(-1);
}else{
System.out.println(answer);
}
}
}
}
}
查看原帖
点赞 评论
相关推荐
11-15 14:35
南京邮电大学 Java 点赞 评论 收藏
分享
10-30 18:20
第一拖拉机制造厂拖拉机学院 C++
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 摸鱼被leader发现了怎么办 #
72244次浏览 415人参与
# 电网求职进展汇总 #
33184次浏览 89人参与
# 工作后,你落下了哪些病根 #
593次浏览 17人参与
# 工作后明白的那些道理 #
27459次浏览 253人参与
# 你学到的“最没用”的职场技能是 #
423次浏览 23人参与
# 七夕节你打算怎么过? #
69890次浏览 806人参与
# 满帮集团求职进展汇总 #
13192次浏览 95人参与
# 上班到公司第一件事做什么? #
113040次浏览 776人参与
# 工作两年想退休了 #
207331次浏览 1833人参与
# 业务面应该做哪些准备 #
80149次浏览 821人参与
# 产品人求职现状 #
298917次浏览 2363人参与
# 通信和硬件还有转码的必要吗 #
79991次浏览 584人参与
# 如果公司降薪,你会跳槽吗? #
114115次浏览 740人参与
# 秋招提前批启动你开冲了吗 #
161862次浏览 2246人参与
# 大厂面试初体验 #
84407次浏览 391人参与
# 大学最后一个寒假,我想…… #
73644次浏览 739人参与
# 你觉得早上几点上班合适? #
89811次浏览 346人参与
# 满分简历要如何准备? #
249247次浏览 2957人参与
# 职场破防瞬间 #
352531次浏览 2826人参与
# 国企/银行/研究所公司爆料 #
177551次浏览 887人参与
