zoukankan      html  css  js  c++  java
  • 贪心算法-调度问题

    intvs=[[1,3],[2,4],[3,6]],这些区间最多有两个区间互不相交,即[[1,3],[3,6]],你的算法应该返回 2。注意边界相同并不算相交。

    正确的思路其实很简单,可以分为以下三步:

    1. 从区间集合 intvs 中选择一个区间 x,这个 x 是在当前所有区间中结束最早的(end 最小)。

    2. 把所有与 x 区间相交的区间从区间集合 intvs 中删除。

    3. 重复步骤 1 和 2,直到 intvs 为空为止。之前选出的那些 x 就是最大不相交子集。

        public static void main(String[] args) {
            testA();
        }
    
        static class NodeA {
            private int start;
            private int end;
    
            public NodeA(int start, int end) {
                this.start = start;
                this.end = end;
            }
    
            public String toString() {
                return "[" + start + " ," + end + "]";
            }
        }
    
        public static void testA() {
            //NodeA[] a = {new NodeA(1, 2), new NodeA(2, 4), new NodeA(5, 6), new NodeA(2, 7), new NodeA(6, 9)};
            //NodeA[] a = {new NodeA(1, 2), new NodeA(2, 4), new NodeA(5, 6), new NodeA(2, 7), new NodeA(6, 9)};
            NodeA[] a = {new NodeA(1, 2), new NodeA(2, 3), new NodeA(3, 4), new NodeA(1, 3)};
            //NodeA[] a = {new NodeA(1, 3), new NodeA(2, 4), new NodeA(3, 6)};
            for (int i = 0; i < a.length; i++) {
                //System.out.println(a[i].toString());
            }
            for (int i = 0; i < a.length; i++) {
                for (int j = i; j < a.length; j++) {
                    if (a[i].end > a[j].end) {
                        NodeA temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
            int count = 1;
            NodeA temp = a[0];
            int end = temp.end;
            for (int j = 1; j < a.length; j++) {
                if (a[j].start >= end) {
                    count++;
                    end = a[j].end;
                }
            }
    
            System.out.println(count);
    
            for (int i = 0; i < a.length; i++) {
                System.out.println(a[i].toString());
            }
        }

    算法参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484493&amp;idx=1&amp;sn=1615b8a875b770f25875dab54b7f0f6f&source=41#wechat_redirect

  • 相关阅读:
    线程同步的几种实现方案
    关于java中三种初始化块的执行顺序
    java数组
    Codeblocks 17汉化
    聚焦天狗
    linux下搭建svn添加多个仓库(项目)
    使用Python在windows环境下获取Linux服务器的磁盘、内存等信息
    python smtplib使用163发送邮件 报错 554 DT:SPM
    防抖与节流
    js
  • 原文地址:https://www.cnblogs.com/use-D/p/13372157.html
Copyright © 2011-2022 走看看