日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java活动安排_贪心法求解活动安排(java实现)

發(fā)布時間:2024/9/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java活动安排_贪心法求解活动安排(java实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

貪心法描述:

貪心算法總是作出在當(dāng)前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮,它所作出的選擇只是在某種意義上的局部最優(yōu)選擇。

在一些情況下,即使貪心算法不能得到整體最優(yōu)解,其最終結(jié)果卻是最優(yōu)解的很好近似。

問題描述:

現(xiàn)有一組活動由你安排,但要求你在最短的時間內(nèi)安排盡可能多的活動。

代碼如下:

Activity類用于封裝活動對象,包括活動的開始時間和結(jié)束時間,另外實現(xiàn)了Comparable接口,用于按照結(jié)束時間非遞減排序

public class Activity implements Comparable {

private String startTime;//活動開始時間

private String endTime;//活動結(jié)束時間

public Activity(String startTime,String endTime){

this.startTime=startTime;

this.endTime=endTime;

}

/**

* 按照活動結(jié)束時間非遞減排序

*/

@Override

public int compareTo(Activity obj) {

String targetEndTime=obj.getEndTime();

int endHour=Integer.parseInt(endTime.split(":")[0]);

int endMin=Integer.parseInt(endTime.split(":")[1]);

int targetEndHour=Integer.parseInt(targetEndTime.split(":")[0]);

int targetEndMin=Integer.parseInt(targetEndTime.split(":")[1]);

int i=endMin>targetEndMin?1:(endMin

return endHour>targetEndHour?1:(endHour

}

public String getStartTime() {

return startTime;

}

public void setStartTime(String startTime) {

this.startTime = startTime;

}

public String getEndTime() {

return endTime;

}

public void setEndTime(String endTime) {

this.endTime = endTime;

}

@Override

public String toString() {

return startTime + "~" + endTime;

}

}ActivityPlan類為具體的執(zhí)行類,通過其layout方法來安排活動

public class ActivityPlan {

List res=new ArrayList();

public List layout(Iterator activities){

if(!activities.hasNext()){

return res;

}

Activity activity=activities.next();

int size=res.size();

if(size==0){

res.add(activity);

}else{

Activity preActivity=res.get(size-1);

String preEndTime=preActivity.getEndTime();

String thisStartTime=activity.getStartTime();

if(legal(preEndTime,thisStartTime)){

res.add(activity);

}

}

return layout(activities);

}

/**

* 當(dāng)前活動的開始時間是否在上一個活動的結(jié)束時間之后

*/

private boolean legal(String preEndTime, String thisStartTime) {

int preHour=Integer.parseInt(preEndTime.split(":")[0]);

int preMin=Integer.parseInt(preEndTime.split(":")[1]);

int thisHour=Integer.parseInt(thisStartTime.split(":")[0]);

int thisMin=Integer.parseInt(thisStartTime.split(":")[1]);

int i=preMin>thisMin?-1:(preMin

int j=preHour>thisHour?-1:(preHour

return j>=0;

}

}Main類用于代碼測試

public class Main {

public static void main(String[] args) {

Set activitys=new TreeSet();

activitys.add(new Activity("9:30","10:30"));

activitys.add(new Activity("7:30","8:50"));

activitys.add(new Activity("10:40","11:30"));

activitys.add(new Activity("8:00","10:30"));

activitys.add(new Activity("8:30","11:40"));

activitys.add(new Activity("10:30","12:30"));

ActivityPlan plan=new ActivityPlan();

List res=plan.layout(activitys.iterator());

for(Activity activity:res){

System.out.print("\t"+activity);

}

}

}程序輸出:7:30~8:50?? ?9:30~10:30?? ?10:40~11:30

總結(jié)

以上是生活随笔為你收集整理的java活动安排_贪心法求解活动安排(java实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。