首页 > 编程语言 > 详细

贪心算法 452

时间:2021-05-30 15:27:57      阅读:15      评论:0      收藏:0      [点我收藏+]

自己做的比较差的答案是,对每一个元素的index0位置排序,然后计算后面的元素和前面的有没有相交,不相交了就把arrow加1

 
    public  int findMinArrowShots(int[][] points) {
        Arrays.sort(points, Comparator.comparingInt(ints -> ints[0]));
        int minIndex = points[0][0];
        int maxIndex = points[0][1];
        int arrowNum = 0;

        for (int i = 1; i < points.length; i++) {
            if (points[i][0] > minIndex){
                minIndex = points[i][0];
            }
            if (points[i][1] < maxIndex){
                maxIndex = points[i][1];
            }
            if (points[i][0] > maxIndex){
                arrowNum++;
                minIndex = points[i][0];
                maxIndex = points[i][1];
            }
        }
        return ++arrowNum;

后来发现根本不应该对index0排序, 也灭有必要计算相交区间。其实只要按index1排序,然后看后一个元素的index0是否小于目前的最小end。

Arrays.sort(points,(a,b)->Integer.compare(a[1],b[1]));
        int end=points[0][1];
        int arrow=1;
        for(int i=0;i<points.length;i++)
        {
            if(points[i][0] > end)
            {
                arrow++;
                end=points[i][1];
            }
        }
        return arrow;

 

贪心算法 452

原文:https://www.cnblogs.com/--here--gold--you--want/p/14827571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!