当前位置: 首页 > news >正文

《LeetCode热题100》---<5.①普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题

第一道:最大子数组和(中等)

第二道:合并区间(中等)

第一道:最大子数组和(中等)

法一:贪心算法

class Solution {public int maxSubArray(int[] nums) {int len = nums.length;int cur_sum  = nums[0];int max_sum = cur_sum;for(int i = 1; i <len; i++){cur_sum = Math.max(nums[i],cur_sum+nums[i]);max_sum = Math.max(cur_sum,max_sum);}return max_sum;}
}

1.将当前和与最大和设置为数组第一个元素 

2.从第二个元素开始遍历数组元素。

  • 令当前和等于 当前元素当前和+当前元素 的最大值
  • 令最大和等于 当前和 与 最大和 的最大值

3.返回最大和,即为答案。

法二:动态规划

class Solution {public int maxSubArray(int[] nums) {int pre = 0, maxAns = nums[0];for (int x : nums) {pre = Math.max(pre + x, x);maxAns = Math.max(maxAns, pre);}return maxAns;}
}

 这个动态规划的答案实际上和上面讲的贪心算法的答案是一样的。

第二道:合并区间(中等)

方法一:排序 

class Solution {public int[][] merge(int[][] intervals) {if (intervals.length == 0) {return new int[0][2];}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return interval1[0] - interval2[0];}});List<int[]> merged = new ArrayList<int[]>();for (int i = 0; i < intervals.length; ++i) {int L = intervals[i][0], R = intervals[i][1];if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {merged.add(new int[]{L, R});} else {merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);}}return merged.toArray(new int[merged.size()][]);}
}
  • 检查空数组:如果输入的区间数组 intervals 为空,则返回一个空的二维数组。
  • 排序区间:将所有区间按起始位置进行排序,确保按从左到右的顺序处理区间。
  • 合并区间
    • 初始化一个列表 merged,用于存储合并后的区间。
    • 遍历每个区间,获取当前区间的起始位置 L 和结束位置 R
    • 如果 merged 为空,或者当前区间的起始位置 L 大于 merged 中最后一个区间的结束位置,则直接将当前区间加入 merged
    • 否则,将当前区间与 merged 中最后一个区间合并,更新最后一个区间的结束位置为二者的最大值。
  • 返回结果:将 merged 列表转换为二维数组并返回。

 通过先对区间进行排序,然后逐一合并重叠区间,最终返回合并后的区间数组。

http://www.lryc.cn/news/415363.html

相关文章:

  • 根据id查找树形结构中匹配数据与上级所有数据
  • 探索亚马逊Amazon S3:无缝存储管理与极速数据传输的奥秘
  • Linux_监测CPU和内存
  • OpenCV经典案例:01 答题卡识别
  • 进程的管理与控制详解:创建、终止、阻塞等待与非阻塞等待
  • 【从零开始一步步学习VSOA开发】开发环境搭建
  • 一篇文章让你用我的世界中的红石搞懂什么是ALU!
  • 硬盘数据恢复:所需时长、全面指南及注意事项
  • 基于SpringBoot+Vue的科研管理系统(带1w+文档)
  • 计算机组成原理 —— 五段式指令流水线
  • 【Bigdata】什么是关系联机分析处理
  • svd在求解最小二乘中的应用
  • JVM—垃圾收集算法和HotSpot算法实现细节
  • nvidia系列教程-AGX-Orin基础环境搭建
  • 使用SpringAOP实现公共字段填充
  • c++初阶-----适配器---priority_queue
  • VSCode上安装C#环境教程
  • VS Code 和 Visual Studio 哪个更好
  • FCA-数据分析理论试卷
  • WPF程序通过CadLib4加载CAD .dwg格式文件
  • 图表全能王(ChartStudio) 上架VisionPro!
  • 【云原生】Job一次性任务详解
  • 化工厂人员定位采用多种定位技术的融合定位系统的好处
  • 使用AI绘图工具生成风景图像的教程
  • 迷你主机:华硕PN65和nuc13pro如何选择?
  • 分享一个好用的印花重绘工具
  • 力扣题解(递增的三元子序列)
  • 做不好PPT的原因
  • 嵌入式人工智能(45-基于树莓派4B的扩展板-舵机驱动板PCA9685)
  • 【数据结构与算法】建立多个栈的三种方案的优缺点分析