贪心算法(活动安排)

function greedy() {
    var arr = [];
    arr.push("[{act:'A'},{s:'0'},{e:'4'}]");
    arr.push("[{act:'B'},{s:'1'},{e:'2'}]");
    arr.push("[{act:'C'},{s:'2'},{e:'5'}]");
    arr.push("[{act:'D'},{s:'3'},{e:'5'}]");
    arr.push("[{act:'E'},{s:'2'},{e:'4'}]");
    arr.push("[{act:'F'},{s:'4'},{e:'6'}]");
    var sort = arr.sort(function (a, b) {
        var aa = eval('(' + a + ')');
        var bb = eval('(' + b + ')');
        return aa[2].e + 0 > bb[2].e + 0 ? 1 : -1;
    })
    var rtn = [];
    var current = eval('(' + arr[0] + ')');
    var currentTime = current[2].e;
    rtn.push(current[0].act);
    for (var i = 1; i < arr.length; i++) {
       var cur = eval('(' + arr[i] + ')');
        if (currentTime <= cur[1].s) {
            currentTime = cur[2].e;
            rtn.push(cur[0].act);
        }
    }
    return rtn;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和引用的描述,Java贪心算法可以用于活动安排问题。下面是Java贪心算法活动安排的实现步骤: 1.定义一个Activity类,包含开始时间start和结束时间end两个属性。 2.将所有活动按照结束时间从小到大排序。 3.定义一个ArrayList集合result,用于存储最大的两两相容的活动子集A。 4.将第一个活动加入result集合。 5.遍历所有活动,如果当前活动的开始时间大于等于result集合中最后一个活动的结束时间,则将当前活动加入result集合。 6.返回result集合。 下面是Java代码实现: ```java import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class ActivityArrange { public static class Activity { int start; int end; public Activity(int start, int end) { this.start = start; this.end = end; } } public static List<Activity> arrange(List<Activity> activities) { List<Activity> result = new ArrayList<>(); if (activities == null || activities.size() == 0) { return result; } // 按照结束时间从小到大排序 Collections.sort(activities, new Comparator<Activity>() { @Override public int compare(Activity o1, Activity o2) { return o1.end - o2.end; } }); // 将第一个活动加入result集合 result.add(activities.get(0)); // 遍历所有活动,如果当前活动的开始时间大于等于result集合中最后一个活动的结束时间,则将当前活动加入result集合 for (int i = 1; i < activities.size(); i++) { Activity lastActivity = result.get(result.size() - 1); Activity currentActivity = activities.get(i); if (currentActivity.start >= lastActivity.end) { result.add(currentActivity); } } return result; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值