2025-3-13 leetcode刷题情况(贪心算法--区间问题)

一、763.划分字母区间

1.题目描述

2.代码

3.思路

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

二、56.合并区间

1.题目描述

2.代码

3.思路

先排序,让所有的相邻区间尽可能的重叠在一起。

  1. 使用 Arrays.sort 方法对 intervals 数组按照区间的起始位置进行排序。通过 (x, y) -> Integer.compare(x[0], y[0]) 作为比较器,确保区间按起始位置从小到大排列。
  2. 初始化合并区间的起始位置和右边界 :将第一个区间的起始位置 intervals[0][0] 赋值给 start,作为当前合并区间的起始位置;将第一个区间的结束位置 intervals[0][1] 赋值给 rightmostRightBound,作为当前合并区间的右边界。
  3. 遍历区间数组 :从第二个区间开始遍历,对于每个区间 intervals[i]
    • 若当前区间的起始位置 intervals[i][0] 大于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间不重叠。此时,将之前的合并区间 [start, rightmostRightBound] 添加到结果列表 res 中,并更新 start 为当前区间的起始位置 intervals[i][0]rightmostRightBound 为当前区间的结束位置 intervals[i][1]
    • 若当前区间的起始位置 intervals[i][0] 小于或等于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间重叠。此时,更新 rightmostRightBound 为当前合并区间右边界和当前区间结束位置的较大值,即 rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1])
  4. 添加最后一个合并区间 :遍历结束后,将最后一个合并区间 [start, rightmostRightBound] 添加到结果列表 res 中。
  5. 返回结果 :将结果列表 res 转换为二维数组并返回,该数组即为合并后的区间数组。
相关推荐
MediaTea1 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z1 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅2 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天3 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap4 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿4 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣6674 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-19435 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法