贪心算法在笔试的套路
1.实现一个不依靠贪心策略的解法X,可以用暴力尝试
2.脑补出贪心策略A,贪心策略B,贪心策略C
3.用解法X和对数器,去验证每一个贪心策略
4.不要纠结贪心策略的证明
会议问题:一些项目要占用一个会议室进行宣讲,会议室不能同时容纳两个项目,给你每一个项目的开始时间和结束时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行宣讲的场次最多。返回这个最多的宣讲次数
把会议结束时间进行排序,谁最先结束就先安排谁,然后把冲突的会议排除。
脑补:1.哪个项目开始时间最早安排谁(错)
2.哪个项目持续时间短先安排谁(错)
3.哪个项目结束时间最早先安排谁(对)
贪心算法的代码一般都很短
public class BestArrange{
public static class Program{
public int start;
public int end;
public Program(int start,int end){
this.start = start;
this.end = end;
}
}
public static class ProgramComparator implements Comparator<Program> {
public int compare(Program o1,Program o2){
return o1.end - o2.end;
}
}
public static int bestArrange(Program[] programs,int timePoint){
Arrays.sort(programs,new ProgramComparator());//按照结束时间排序
int res = 0;
for(int i = 0; i < programs.length; i++){
if(timePoint < programs[i].start){
res++;
timePoint = programs[i].end;
}
}
return res;
}
}