day30--56. 合并区间+ 738.单调递增的数字

news/2024/9/11 4:16:11/ 标签: 算法

一、56. 合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/
文章讲解:https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html
视频讲解:https://www.bilibili.com/video/BV1wx4y157nD

1.1 初见思路

  1. 先按左边界进行排序,然后逐个遍历,进行区间合并

1.2 具体实现

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)-> Integer.compare(a[0],b[0]));List<int[]> list = new LinkedList<>();int tempL = intervals[0][0];int tempR = intervals[0][1];for(int[] arr:intervals){if(arr[0]<=tempR){//可以合并tempR = Math.max(tempR,arr[1]);}else{//不可以合并了,把区间收集起来,然后更新tempL和tempRlist.add(new int[]{tempL,tempR});tempL=arr[0];tempR=arr[1];}}list.add(new int[]{tempL,tempR});return list.toArray(new int[list.size()][]);}
}

1.3 重难点

  • 二维数组排序写法:
    Arrays.sort(intervals,(a,b)-> Integer.compare(a[0],b[0]));
  • 返回结果是二维数组,需要先用List来存,这里的写法都需要注意;

二、 738.单调递增的数字

题目链接:https://leetcode.cn/problems/monotone-increasing-digits/
文章讲解:https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html
视频讲解:https://www.bilibili.com/video/BV1Kv4y1x7tP

2.1 初见思路

  1. 判断这个数自己是否是单调递增,如果不是,那么就要缩小这个数
  2. 缩小肯定要从个位数开始考虑,但是仅仅缩小个位数是不可能满足条件的,因为刚都判断了不是单调递增,那么仅仅缩小个位数是,个位数更小了,更不可能,所以个位数肯定是9(从十位借1了,而不是变大哦);
  3. 如果有十位,判断十位数减一后是否大于百位数,如果大于,那么就不动了,如果减一后小于百位数,就类似于刚个位数的操作,十位变成9了,百位需要减1,以此类推;
  4. 综上所述,其实是找下标,下标往后的就都是9,下标值-1;

2.2 具体实现

class Solution {public int monotoneIncreasingDigits(int n) {if(n==0){return 0;}List<Integer> list = new LinkedList<>();while (n != 0) {list.add(n % 10);n = n / 10;}int endIndex = 0;boolean flag = false;for (int i = 0; i < list.size() - 1; i++) {if (list.get(i) < list.get(i + 1)) {flag = true;list.set(i + 1, list.get(i + 1) - 1);endIndex = i;}}if (flag) {for (int i = 0; i <= endIndex; i++) {list.set(i, 9);}}reverseList(list);String res = "";for (int i = 0; i < list.size(); i++) {res += list.get(i) + "";}return Integer.parseInt(res);}private static void reverseList(List<Integer> list) {int leftIndex = 0;int rightIndex = list.size() - 1;while (leftIndex < rightIndex) {// Swap the elements at leftIndex and rightIndexInteger temp = list.get(leftIndex);list.set(leftIndex, list.get(rightIndex));list.set(rightIndex, temp);leftIndex++;rightIndex--;}}
}

上述写法效率太低了,仔细分析分析为什么效率这么低

2.3 重难点

  • 怎么把这个int类型的数转成每一位来进行比较呢?
  • 换个思路呢,直接用char数组

2.4 改进后的算法

class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] chars = s.toCharArray();int start = s.length();for (int i = s.length() - 2; i >= 0; i--) {if (chars[i] > chars[i + 1]) {chars[i]--;start = i+1;}}for (int i = start; i < s.length(); i++) {chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));}
}

day31--休息日


http://www.ppmy.cn/news/1474491.html

相关文章

防火墙第一次综合实验

DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问。 办公区设备10.8.2.1不允许访问DMZ区的FTP服务器和HTTP服务器&#xff0c;仅能ping通10.0.3.10 1.先建立拒绝BG到DMZ区的安全策略 2.建立BG到DMZ区的icmp允许 3…

AI推介-大语言模型LLMs之RAG(检索增强生成)论文速览(arXiv方向):2024.06.01-2024.06.20

文章目录&#xff5e; 1.StackRAG Agent: Improving Developer Answers with Retrieval-Augmented Generation2.FoRAG: Factuality-optimized Retrieval Augmented Generation for Web-enhanced Long-form Question Answering3.Model Internals-based Answer Attribution for T…

springboot仓库管理系统+lw+源码+讲解+调试

第3章 系统分析 在进行系统分析之前&#xff0c;需要从网络上或者是图书馆的开发类书籍中收集大量的资料&#xff0c;因为这个环节也是帮助即将开发的程序软件制定一套最优的方案&#xff0c;一旦确定了程序软件需要具备的功能&#xff0c;就意味着接下来的工作和任务都是围绕…

vue项目实现路由按需加载(路由懒加载)的三种方式

使用异步组件 在使用vue-router配置路由时&#xff0c;可以使用异步组件来实现路由的按需加载。异步组件会在路由被访问时才进行加载&#xff0c;从而实现按需加载的效果。需要注意的是&#xff0c;使用异步组件需要借助webpack的动态import语法来实现。例如&#xff1a; cons…

java 公共字段填充

公共字段填充 1、mybatis-plus2、mybatis 使用注解加aop2.1 自定义注解2.2 自定义切面类2.3 在mapper上添加上自定义的注解 1、mybatis-plus 通过在类上使用如下的注解 TableField(fill FieldFill.INSERT) 是 MyBatis-Plus 中的注解&#xff0c;用于自动填充字段的值。MyBat…

动态规划算法-以中学排课管理系统为例

1.动态规划算法介绍 1.算法思路 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中&#xff0c;可能会有许多可行解。每一个解都对应于一个值&#xff0c;我们希望找到具有最优值的解。动态规划算法与分治法类似&#xff0c;其基本思想也是将待求解问题分解成若…

算法力扣刷题记录 四十【226.翻转二叉树】

前言 继续二叉树其余操作&#xff1a; 记录 四十【226.翻转二叉树】 一、题目阅读 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例…

three完全开源扩展案例02-跳动的音乐

更多案例尽在https://threelab.cn/ 演示地址 import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";let mediaElement; let analyser; let scene; let camera; let renderer; let controls; …

DOM(文档对象模型)生命周期事件

前言 DOM 生命周期事件涉及到从创建、更新到销毁 DOM 元素的不同阶段。 ● 我们来看下当HTML文档加载完再执行JavaScript代码 document.addEventListener(DOMContentLoaded, function (e) {console.log(HTML parsed adn DOM tree built!, e); })● 除此之外&#xff0c;浏览…

Electron 简单搭建项目

准备工作 全局安装 node npm创建文件夹&#xff0c;并执行 npm init安装 electron npm i electron --save-dev在 package.json 配置文件中的scripts字段下增加一条start命令&#xff1a; {"scripts": {"start": "electron ."} }由于配置中的入…

Day05-组织架构-角色管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.组织架构-编辑部门-弹出层获取数据2.组织架构-编辑部门-编辑表单校验3.组织架构-编辑部门-确认取消4.组织架构-删除部门5.角色管理-搭建页面结构6.角色管理-获取数…

STM32智能机器人导航系统教程

目录 引言环境准备智能机器人导航系统基础代码实现&#xff1a;实现智能机器人导航系统 4.1 数据采集模块 4.2 数据处理与导航算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;机器人导航应用与优化问题解决方案与优化收尾与总结 1. 引言 智能机器…

【LeetCode】面试题 16.21. 交换和

质量还不错的一道题&#xff0c;适合用于考察二分法。 1. 题目 2. 分析 求出两个数组的总和&#xff0c;我们令总和少的为less&#xff0c;总和多的为more&#xff1b;如果两个数组的总和是奇数&#xff0c;那么怎么都配不平&#xff0c;直接返回false&#xff1b;如果两个数…

冒泡排序与其C语言通用连续类型排序代码

冒泡排序与其C语言通用连续类型排序代码 冒泡排序冒泡排序为交换排序的一种&#xff1a;动图展示&#xff1a;冒泡排序的特性总结&#xff1a;冒泡排序排整型数据参考代码&#xff08;VS2022C语言环境&#xff09;&#xff1a; 冒泡排序C语言通用连续类型排序代码对比较的方式更…

uniapp自动升级

一、创建云服务空间&#xff08;https://unicloud.dcloud.net.cn&#xff09; 云空间用于关联需要版本控制升级的项目&#xff0c;如果已拥有云空间则省略此步骤。 二、搭建 uni升级中心 - 后台管理系统&#xff08;升级中心 uni-upgrade-center - Admin&#xff09; uni-adm…

C++:组合和继承的区别

组合介绍以及与继承对比 什么是组合 (1)composition&#xff0c;组合&#xff0c;就是在一个class内使用其他多个class的对象作为成员 (2)用class tree做案例讲解 (3)组合也是一种代码复用方法&#xff0c;本质也是结构体包含 #include <iostream> #include <vector…

【两大3D转换SDK对比】HOOPS Exchange VS. CAD Exchanger

在现代工业和工程设计领域&#xff0c;CAD数据转换工具是确保不同软件系统间数据互通的关键环节。HOOPS Exchange和CAD Exchanger是两款备受关注的工具&#xff0c;它们在功能、支持格式、性能和应用场景等方面有着显著差异。 本文将从背景、支持格式、功能和性能、应用场景等…

【密码学】密码学中的四种攻击方式和两种攻击手段

在密码学中&#xff0c;攻击方式通常指的是密码分析者试图破解加密信息或绕过安全机制的各种策略。根据密码分析者对明文、密文以及加密算法的知识程度&#xff0c;攻击可以分为以下四种基本类型&#xff1a; 一、四种攻击的定义 &#xff08;1&#xff09;唯密文攻击(COA, C…

Python面试题:请解释 Python 的垃圾回收机制

Python 的垃圾回收机制主要通过引用计数&#xff08;Reference Counting&#xff09;和循环垃圾收集&#xff08;Cycle Garbage Collection&#xff09;来管理内存。以下是对这两种机制及其相关知识点的详细解析&#xff1a; 引用计数 原理 每个对象都有一个引用计数器&…

第一关:Linux基础知识

Linux基础知识目录 前言LinuxInternStudio 关卡1. InternStudio开发机介绍2. SSH及端口映射2.1 什么是SSH&#xff1f;2.2 如何使用SSH远程连接开发机&#xff1f;2.2.1 使用密码进行SSH远程连接2.2.2 配置SSH密钥进行SSH远程连接2.2.3 使用VScode进行SSH远程连接 2.3. 端口映射…