LeetCode 五月打卡-day20

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day20相关的知识,希望对你有一定的参考价值。

520快乐呀

436. 寻找右区间


【宫水三叶】一题双解 :「排序 + 二分」&「双指针(莫队思想)」
【负雪明烛】动画题解:二分查找

class Solution 
    public int[] findRightInterval(int[][] intervals)
        int n = intervals.length;
        int[] starts = new int[n];//记录每个区间的开始值
        HashMap<Integer,Integer> map = new HashMap<>();//记录开始值在intervals数组中对应的下标
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) 
            starts[i] = intervals[i][0];
            map.put(intervals[i][0],i);
        
        Arrays.sort(starts);//排序
        //二分
        for (int i = 0; i < n; i++) 
            int right = n - 1, left = 0;
            while (right > left)//找大于intervals[i][1]的最小值
                int mid = (right + left) >> 1;
                if (starts[mid] < intervals[i][1])
                    left = mid + 1;
                else right = mid;
            
            if (starts[left] < intervals[i][1]) ans[i] = -1;
            else ans [i] = map.get(starts[left]);
        
        return ans;
    

以上是关于LeetCode 五月打卡-day20的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day11

LeetCode 五月打卡-day01

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day08

LeetCode 五月打卡-day13