贪心算法习题其三【力扣】【算法学习day.20】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.划分字母区间

题目链接: 763. 划分字母区间 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> list = new ArrayList<>();
        char[] srr = s.toCharArray();
        int n = s.length();
         int[] addr = new int[30];
         for(int i = 0;i<n;i++){
            addr[srr[i]-'a'] = i;
         }
        int count = 0;
        int l = 0;
        int flag = 0;
        int flagl = 0;
        while(l<n){
            if(flag == 0){
                count++;
                flagl = addr[srr[l]-'a'];
                if(flagl==l){
                   list.add(1);
                   count=0;
                }
                flag=1;
            }else{
                flagl = Math.max(addr[srr[l]-'a'],flagl);
                count++;
                if(l==flagl){
                    list.add(count);
                    count = 0;
                    flag = 0;
                }
            }
             l++;
        }
        return list;
    }
}

2.合并区间

题目链接: 56. 合并区间 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        int n = intervals.length;
        int[][] ans = new int[n][2];
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });
        int xl = 0;
        int xr = 0;
        int flag = 0;
        int l = 0;
        int count = 0;
        while (l < n) {
            if (flag == 0) {
                if (l == n - 1) {
                    ans[count][0] =intervals[l][0];
                    ans[count++][1] =intervals[l][1];
                    l++;
                    break;
                }
                xl = intervals[l][0];
                xr = intervals[l][1];
                flag=1;
            }
            else{
                if((intervals[l][0]<=xr&&xr<=intervals[l][1])||(xr>=intervals[l][1]&&xl<=intervals[l][0])){
                    xr =Math.max(intervals[l][1],xr);
                    xl =Math.min(intervals[l][0],xl);
                    if(l==n-1){
                        ans[count][0] =xl;
                        ans[count++][1] = xr;
                        break;
                    }
                }
                else{
                    ans[count][0] =xl;
                    ans[count++][1] = xr;
                    l--;
                    flag = 0;
                }

            }
            l++;
        }
         int[][] ans2 = new int[count][2];
         for(int i = 0;i<count;i++){
            ans2[i]=ans[i];
         }
        return ans2;
    }
}

后言

上面是贪心算法的部分习题,下一篇会讲解贪心算法的其他相关力扣习题,希望有所帮助,一同进步,共勉!

相关推荐
2501_941982055 分钟前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
马猴烧酒.29 分钟前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
Ziky学习记录1 小时前
从零到实战:React Router 学习与总结
前端·学习·react.js
alphaTao1 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
sino爱学习1 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
甄心爱学习1 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
颜酱1 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
sensen_kiss1 小时前
INT303 Coursework1 爬取影视网站数据(如何爬虫网站数据)
爬虫·python·学习
不知名XL2 小时前
day50 单调栈
数据结构·算法·leetcode