Day36--数据结构与算法(Java) 贪心算法:无重叠区间 ,划分字母区间 , 合并区间

文章介绍了三个LeetCode上的编程问题,分别是435.无重叠区间、763.划分字母区间和56.合并区间,每个问题都提供了Java解决方案,主要涉及对区间进行排序和判断重叠的算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、435. 无重叠区间

二、763.划分字母区间

三、56. 合并区间


一、435. 无重叠区间

力扣题目链接

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
    Arrays.sort(intervals ,(a,b)->{
        return Integer.compare(a[0],b[0]);
    });

    int count=1;
    for(int i=1;i<intervals.length;i++)
    {
        if(intervals[i][0]>=intervals[i-1][1]) 
        continue;
        else{
        intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);
          count++;
        }
    }
    return count-1;
    }
}

另外一种写法

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
    Arrays.sort(intervals ,(a,b)->{
        return Integer.compare(a[0],b[0]);
    });

    int count=1;
    for(int i=1;i<intervals.length;i++)
    {
        if(intervals[i][0]<intervals[i-1][1]) 
        {
      intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);
        }
        else{
         count++;
        }
    }
    return intervals.length-count;
    }
}

 

二、763.划分字母区间

力扣题目链接

class Solution {
    public List<Integer> partitionLabels(String s) {
     List<Integer> list=new LinkedList<>();
     int[] edge=new int[26];
     char [] chars=s.toCharArray();
     for(int i=0;i<chars.length;i++)
    {
      edge[chars[i]-'a']=i;
    }
     int idx=0;
     int last=-1;
     for(int i=0;i<chars.length;i++)
     {
         idx=Math.max(idx,edge[chars[i]-'a']);
         if(i==idx)
         {
             list.add(i-last);
             last=i;
         }
     }
     return list;
    }
}

 

三、56. 合并区间

力扣题目链接

class Solution {
    public int[][] merge(int[][] intervals) {
       LinkedList<int []>result=new LinkedList<>();
        
       Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
        
        result.add(intervals[0]);
        int count=1;
        for(int i=1;i<intervals.length;i++)
        {
            if(intervals[i][0]<=result.getLast()[1])
            {
            int start=result.getLast()[0];
            int end=Math.max(intervals[i][1],result.getLast()[1]);
            result.removeLast();
            result.add(new int[]{start, end});
            }
            else{
           result.add(intervals[i]);
            }
        }

       return result.toArray(new int [result.size()][]);
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值