leetcode57.插入区间——学习笔记

题目:力扣icon-default.png?t=M1H3https://leetcode-cn.com/problems/insert-interval/


class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        int[][] finalInterval = new int[intervals.length+1][2];
        int count = 0;
        while(count<=intervals.length){
            if(count<intervals.length){
                finalInterval[count][0] = intervals[count][0];
                finalInterval[count][1] = intervals[count][1];
            }else{
                finalInterval[count][0] = newInterval[count-intervals.length];
                finalInterval[count][1] = newInterval[count-intervals.length+1];
            }
            count++;
        }
        return merge(finalInterval);
        //return finalInterval;


    }
        public int[][] merge(int[][] intervals) {
        int len = intervals.length;
        //排序
        quickSort(intervals,0,len-1);
        //执行
        List<int[]> path = new ArrayList<int[]>();
        int left = 0;
        int right = 0;
        while(right<len){
            int min = intervals[left][0];
            int max = intervals[right][1];

            while(right<intervals.length && intervals[right][0] <= max){
                max = Math.max(max,intervals[right][1]);
                right++;
            }
            path.add(new int[]{min,max});
            left = right;
        }

        int[][] ans = new int[path.size()][2];
            for(int i=0;i<path.size();i++){
                ans[i][0] = path.get(i)[0];
                ans[i][1] = path.get(i)[1];
            }
        return ans;
    }

        //快速排序
    private void quickSort(int[][] intervals,int L,int R){
        if(L>=R){
            return;
        }
        int left = L;
        int right = R;
        int pivot = intervals[left][0];
        while(left<right){
            while(left<right && intervals[right][0]>=pivot){
                right--;
            }
            if(left<right){//intervals[right][0]<pivot
                int temp0 = intervals[left][0];
                int temp1 = intervals[left][1];
                intervals[left][0] = intervals[right][0];
                intervals[left][1] = intervals[right][1];
                intervals[right][0] = temp0;
                intervals[right][1] = temp1;
            }
            while(left<right && intervals[left][0]<=pivot){
                left++;
            }
            if(left<right){//intervals[left][0]>pivot
                int temp0 = intervals[right][0];
                int temp1 = intervals[right][1];
                intervals[right][0] = intervals[left][0];
                intervals[right][1] = intervals[left][1];
                intervals[left][0] = temp0;
                intervals[left][1] = temp1;
            }
            if(left>=right){
                intervals[left][0] = pivot;
            }
        }
        quickSort(intervals,L,right-1);
        quickSort(intervals,right+1,R);
    }
}

 


思路:这题跟 leetcode56.合并区间唯一的区别就是增加了一个数组,今天就稍稍偷个懒,直接将新的数组添进去,然后利用上一题的解法直接求解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hokachi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值