The Skyline Problem Leetcode Java__Java

來源:互聯網
上載者:User
public class Solution {  class KeyPoint {        public int key;        public int height;        public KeyPoint next = null;        public KeyPoint(int key, int height) {            this.key = key;            this.height = height;        }    }    public static int[] getKeyPoint(int key, int height) {        int[] kp = new int[2];        kp[0] = key;        kp[1] = height;        return kp;    }    public List<int[]> getSkyline(int[][] buildings) {        KeyPoint head = new KeyPoint(-1,0);        KeyPoint prevKP = head;        for (int[] building:buildings) {            int l = building[0], r = building[1], h= building[2];            // insert left point            while (prevKP.next != null && prevKP.next.key <= l) prevKP = prevKP.next;            int preHeight = prevKP.height;            if (prevKP.key == l) prevKP.height = Math.max(prevKP.height, h);            else if (prevKP.height < h) {                KeyPoint next = prevKP.next;                prevKP.next = new KeyPoint(l, h);                prevKP = prevKP.next;                prevKP.next = next;            }            // insert right point and update points in between            KeyPoint prev = prevKP, cur = prevKP.next;            while (cur != null && cur.key < r) {                preHeight = cur.height;                cur.height = Math.max(cur.height, h);                if (cur.height == prev.height)                    prev.next = cur.next;                else                    prev = cur;                cur = cur.next;            }            if (prev.height != preHeight && prev.key != r && (cur == null || cur.key != r)) {                KeyPoint next = prev.next;                prev.next = new KeyPoint(r, preHeight);                prev.next.next = next;            }        }        // convert to List<int[]>        List<int[]> list = new ArrayList<int[]>();        KeyPoint prev = head, cur = head.next;        while (cur != null) {            if (cur.height != prev.height)                list.add(getKeyPoint(cur.key, cur.height));            prev = cur;            cur = cur.next;        }        return list;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.