zoukankan      html  css  js  c++  java
  • 计算与所有线段都重合的线段数目

    package com.karl.util;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;

    public class TestOverlap {

        private static List<Duration> getDurations() {
            Duration d1 = new Duration(new Node(4L, true), new Node(5L, false));
            Duration d2 = new Duration(new Node(1L, true), new Node(3L, false));
            Duration d3 = new Duration(new Node(2L, true), new Node(3L, false));
            Duration d4 = new Duration(new Node(2L, true), new Node(4L, false));
            Duration d5 = new Duration(new Node(1L, true), new Node(4L, false));
            List<Duration> list = new ArrayList<Duration>();
            list.add(d1);
            list.add(d2);
            list.add(d3);
            list.add(d4);
            list.add(d5);
            return list;
        }

        private static List<Node> getNodes() {
            List<Duration> durations = getDurations();
            List<Node> nodes = new ArrayList<Node>();
            for (Duration d : durations) {
                nodes.add(d.getStart());
                nodes.add(d.getEnd());
            }
            return nodes;
        }

        private static int getOverlap(Duration d) {
            int max = 1;
            int current = 1;
            List<Node> nodes = getNodes();
            Collections.sort(nodes);
            Iterator<Node> it = nodes.iterator();
            while (it.hasNext()) {
                Node node = it.next();
                System.out.println(node);
                if ((node.getValue() >= d.getStart().getValue())
                        && (node.getValue() <= d.getEnd().getValue())) {
                    if (node.isStart()) {
                        current++;
                    } else {
                        current--;
                    }
                    if (current > max) {
                        max = current;
                    }
                }
            }
            return max;
        }

        public static void main(String[] args) {
            Duration d = new Duration(new Node(0L, true), new Node(9L, false));
            System.out.println(getOverlap(d));
        }

    }

    class Duration {
        private Node start;
        private Node end;

        public Node getStart() {
            return start;
        }

        public void setStart(Node start) {
            this.start = start;
        }

        public Node getEnd() {
            return end;
        }

        public void setEnd(Node end) {
            this.end = end;
        }

        public Duration(Node start, Node end) {
            this.start = start;
            this.end = end;
        }

    }

    class Node implements Comparable<Node> {
        private Long value;
        private boolean start;// this flag indicate the start point or the destination point.

        public Node(Long value, boolean start) {
            this.value = value;
            this.start = start;
        }

        public Long getValue() {
            return value;
        }

        public void setValue(Long value) {
            this.value = value;
        }

        public boolean isStart() {
            return start;
        }

        public void setStart(boolean start) {
            this.start = start;
        }

        @Override
        public String toString() {
            return "[" + value + "," + start + "]";
        }

        @Override
        public int compareTo(Node o) {
            return Long.valueOf(this.value).compareTo(Long.valueOf(o.value));
        }

    }
  • 相关阅读:
    逻辑分析推理(海盗分金问题)
    使用数组构建 ExtJs TreeStore 结构
    逻辑分析推理(找出轻球问题)
    逻辑分析推理(骗子购物问题)
    逻辑分析推理(戴帽子问题)博弈
    简单的排序算法(冒泡、选择、插入)
    逻辑分析推理(五小姐问题)
    逻辑分析推理(倒水问题)
    关于排序(快速排序)
    游戏开发基础(2)
  • 原文地址:https://www.cnblogs.com/zhonghan/p/2680012.html
Copyright © 2011-2022 走看看