Javascript每天一道算法题(十四)——合并数组区间_中等

文章目录

  • 1、问题
  • 2、示例
  • 3、解决方法
    • (0)方法0——双指针(错误思路)
    • (1)方法1——双指针(正确)
  • 总结


1、问题

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

2、示例

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

3、解决方法

(0)方法0——双指针(错误思路)

错误思路:把二维数组变为一维数组排序后进行双指针。虽然这样用示例一是有效果的,如下图


let intervals = [[1,3],[2,6],[4,5],[15,18]]
var merge = function(intervals) {let newArray = [];intervals.forEach(item => {newArray.push( ...item)});newArray.sort((a,b)=>{ return a-b}) // 排序// newArray = new Set(...newArray);// console.log('aa', newArray);let left=0,right=1;let arr = []arr.push(newArray[0])while(right < newArray.length) {if(newArray[left] +1 !== newArray[right] && newArray[left] +1 !== newArray[right]) {arr.push(newArray[right])} left++right++}console.log('res', arr);
};
merge(intervals);

在这里插入图片描述

将intervals改为[[1,3],[2,6],[4,5],[15,18]],应该返回 [1,6,15,18],实际上返回为[1, 15, 18],并不能返回偶数的数据,最后进行两两放到一个新数组中

(1)方法1——双指针(正确)

let intervals = [[2,6],[1,3],[8,10],[15,18]]
var merge = function(intervals) {// 1: 排序:将二维数组的第一项进行排序// 二维数组的第一个相等,就根据第二个排序,不想等就根据第一个排序// 排的是二维数组的第一个,不是二维数组里面每一个数组的第一个第二个排序// 如[[2,6],[1,3],[8,10],[15,18]] 变成[[1,3],[2,6],[8,10],[15,18]]intervals.sort((a,b)=> a[0]== b[0] ? a[1] - b[1]: a[0] - b[0])// 2-1:定义左右指针let left = intervals[0][0],right = intervals[0][1];// 2-2: 定义返回符合条件的空数组let res = []; // 3:遍历二维数组,获取每一项进行比较intervals.forEach((item, index) => {debugger// 4: 如果遍历后的第一个值大于右指针,说明在一个区间,将当前这个区间的左右指针添加到数组中,并将当前item的值设置为左右指针// 如[1,3] 中 1 > 3 不成立,right = 3// [2,6]中 2> 3 不成立 right = 6// [8,10]中 8 > 6 成立 ,将[1,6]添加到数组中,并且左右指针改为当前item的值if(item[0] > right) {res.push([left,right])left = item[0]right = item[1]} else {right = item[1]}});// 5: 遍历完成后,由于最后区间的值没有对比,所以额外添加到数组中res.push([left, right])console.log('res', res); // 6: 返回题目效果
};
merge(intervals);

总结

难度: 中等
注意点:使用双指针解决该问题的时候,不能将二维数组扁平为一维数组进行计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么读一个网络的代码

1.网络代码怎么来的&#xff1f; 我想要实现一个功能&#xff0c;这个功能是输入一张图像&#xff0c;返回一个类别结果。 所以很明确就有三个部分&#xff0c;一个是接受图像输入&#xff0c;一个是处理图像得到处理结果&#xff0c;一个是对处理结果判断生成结果。 现在想要使…

rocketmq 发送时异常:system busy 和 broker busy 解决方案

之前写的解决方案,都是基于测试环境测试的.到生产环境之后,正常使用没有问题,生产环境压测时,又出现了system busy异常(简直崩溃).最后在rocketmq群里大佬指导下,终于解决(希望是彻底解决). 下面直接给出结果: 目前通过生产环境各种参数修改测试得出: broker busy异常: 可通…

Using PeopleCode in Application Engine Programs在应用引擎程序中使用PeopleCode

This section provides an overview of PeopleCode and Application Engine programs and discusses how to: 本节概述了PeopleCode和应用程序引擎程序&#xff0c;并讨论了如何: Decide when to use PeopleCode.决定何时使用PeopleCode。Consider the program environment.考…

Java之《ATM自动取款机》(面向对象)

《JAVA编程基础》项目说明 一、项目名称&#xff1a; 基于JAVA控制台版本银行自动取款机 项目要求&#xff1a; 实现银行自动取款机的以下基本操作功能&#xff1a;读卡、取款、查询。&#xff08;自动取款机中转账、修改密码不作要求&#xff09; 具体要求&#xff1a; 读卡…

基于SSM的校园奶茶点单管理系统

基于SSM的校园奶茶点单管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 奶茶列表 登录界面 管理员界面 用户界面 摘要 随着社会的发展和科技的进…

ubuntu搭建phpmyadmin+wordpress

Ubuntu搭建phpmyadmin wordpress Linux系统设置&#xff1a;Ubuntu 22配置apache2搭建phpmyadmin配置Nginx环境&#xff0c;搭建wordpress Linux系统设置&#xff1a;Ubuntu 22 配置apache2 安装apache2 sudo apt -y install apache2设置端口号为8080 sudo vim /etc/apache…

paddle detection 训练参数

#####################################基础配置##################################### # 检测算法使用YOLOv3,backbone使用MobileNet_v1,数据集使用roadsign_voc的配置文件模板,本配置文件默认使用单卡,单卡的batch_size=1 # 检测模型的名称 architecture: YOLOv3 # 根据…

【CCF-PTA】第03届Scratch第05题 -- 统计出现次数最多的字

统计出现次数最多的字 【题目描述】 我国自古流传下来不少脍炙人口的诗歌&#xff0c;各具特色&#xff0c;别具一格。有些诗只用寥寥几个字&#xff0c;就能描绘出生动的意境。 请找出以下诗篇中出现次数最多的字&#xff0c;如果有多个字出现次数相同&#xff0c;则答案为…

Java中基于SSM框架的数据保存方法与日期处理

​ 一、详解 在SSM框架中&#xff0c;保存数据通常涉及到服务层和数据访问层。服务层处理业务逻辑&#xff0c;而数据访问层负责与数据库进行交互。 二、代码 Override public void save(Student student) { Date date new Date(); SimpleDateFormat format new Sim…

什么是LLC电路?

LLC电路是由2个电感和1个电容构成的谐振电路&#xff0c;故称之为LLC&#xff1b; LLC电路主要由三个元件组成&#xff1a;两个电感分别为变压器一次侧漏感(Lr)和励磁电感(Lm)&#xff0c;电容为变压器一次侧谐振电容(Cr)。这些元件构成了一个谐振回路&#xff0c;其中输入电感…

【C/PTA】函数专项练习(四)

本文结合PTA专项练习带领读者掌握函数&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 计算A[n]1/(1 A[n-1])6-2 递归实现顺序输出整数6-3 自然数的位数(递归版)6-4 分治法求解金块问题6-5 汉诺塔6-6 重复显示字符(递归版)…

字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan…

Android MemoryFile 共享内存

应用场景&#xff1a; 跨进程传输大数据&#xff0c;如文件、图片等&#xff1b; 技术选型&#xff1a; 共享内存–MemoryFile&#xff1b; 优点&#xff1a; 1. 共享内存没有传输大小限制&#xff0c;所以和应用总的分配内存一样&#xff08;512MB&#xff09;&#xff1…

Java 根据文件名获取文件类型

比如文件名是“测试文件.png”&#xff0c;则获取的文件类型就是 png 直接上一个通用的方法&#xff0c;拿去直接就能用。 // 比如入参文件名是“测试文件.png”&#xff0c;则出参就是 pngprivate String getFileSuffix(String fileName) {String[] fileStr fileName.split(&…

educoder中共享单车之数据可视化

第1关:绘制地图 <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&…

专用设备上的SD卡插入电脑想读取数据,提示要格式化?

环境&#xff1a; Win10 专业版 车载感应数据专用SD卡 问题描述&#xff1a; 专用设备上的SD&#xff0c;现在把SD卡从设备取出&#xff0c;用读卡器插入电脑提示要格式化&#xff1f; 解决方案&#xff1a; 1.先进入PE查看SD分区情况&#xff0c;SD格式为ext4 查看文件…

lombok中使用@Builder构造器模式时的默认值问题

这里写自定义目录标题 问题case原因解决方案 文章参考来源&#xff1a;https://chenyongjun.vip/articles/107 问题case Lombok 使用广泛&#xff0c;这里分享一个 Lombok Builder 小 case&#xff0c;今天自己踩了坑。 Data Builder public class User {private String name…

MLP 有哪些可学习的参数

多层感知机&#xff08;MLP&#xff09;的参数是需要在训练过程中学习的。MLP是一种前馈神经网络&#xff0c;其结构包括输入层、多个隐藏层和输出层。在训练过程中&#xff0c;MLP通过反向传播算法来调整网络的权重&#xff0c;以最小化预测值与实际值之间的误差。 MLP的学习…

安卓开发——Android Studio常见报错与解决方法

1. No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-android 这个错误是由于较新版本的NDK的./toolchains目录中没有arm-linux-androideabi文件&#xff0c;解决办法是从旧的NDK版本里面复制到自己的NDK的版本里面&#xff0c;就可以了。 打…

WSL登录时提示nsenter: cannot open /proc/320/ns/time: No such file or directory的解决办法

在登录 WSL 的 Ubuntu 时&#xff0c;不仅要求 root 权限&#xff0c;还登录失败&#xff0c;提示“nsenter: cannot open /proc/320/ns/time: No such file or directory”。 解决办法是在 powershell 中执行 “wsl – sudo vi /etc/profile”命令&#xff0c;删除文件内容&a…