首页 > 其他分享 >区间交集问题

区间交集问题

时间:2023-03-12 15:33:08浏览次数:27  
标签:map maxx Map 交集 get 问题 ar let 区间

差分:https://blog.csdn.net/weixin_54442315/article/details/122663584

arr    1 4 7  12

map  1 3 3 5 

map为差分数组,当arr区间更新时,可以仅更新map的区间端点 

借助Map 得到arr的元素|前n项和

 

问题:https://www.acwing.com/problem/content/1954/

 

function  get(ar,x,y,z){
       let n  =ar.length;
       let map  =new Map();
    //    差分数组
       for(let i  =0;i<n;i++){
        // map[0]+=x;
        map.set(0,map.get(0)==undefined?x:map.get(0)+x);
        // map[ar[i][0]]+=(-x+y);
        map.set(ar[i][0],map.get(ar[i][0])==undefined?(-x+y):map.get(ar[i][0])+(-x+y));
        // map[ar[i][1]]+=(-y+z);
        map.set(ar[i][1]+1,map.get(ar[i][1]+1)==undefined?(-y+z):map.get(ar[i][1]+1)+(-y+z));
       }
    //    需要借助前缀和计算每个温度对应的结果,所以需要map的key从小到大排序
    //    但是js中map的key 不会自动排序 (排序) c++可以的
       
       let arp  =[...map];
       arp.sort((o1,o2)=>{
             return o1[0]-o2[0];
       });
       map = new Map(arp);
       let sum  =0,maxx  =0;
       for(let key of map.keys()){
           sum+=map.get(key);
           maxx = Math.max(sum,maxx);
       }
       return maxx;



}


let ar  =[[5,8],[3,4],[13,20],[7,10]];
console.log(get(ar,7,9,6));

 

n个区间,代表不同烟花的开始和结束时刻

在某个时刻可以最多看到几个烟花,这种时刻有几个??

[2,6]

[3,7]

[9,10]

在时刻 3 可以看到2个烟花 

这样的时刻有 3 4 5 6 ,共4个

 

 

 

function get(ar){

    let n    =ar.length;
    let map  =new Map();
    for(let i  =0;i<n;i++){
        map.set(ar[i][0],map.get(ar[i][0])==undefined?1:map.get(ar[i][0])+1);
        map.set(ar[i][1]+1,map.get(ar[i][1]+1)==undefined?-1:map.get(ar[i][1]+1)-1);
    }
    let  arp =  [...map];
    arp.sort((o1,o2)=>{
        return o1[0]-o2[0];
    })
    map   =  new Map(arp);
    let cnt  =0;
    let maxx  =0;
    let ars  =[];
    for(let key of map.keys()){
        cnt+=map.get(key);
        ars.push([key,cnt])
       
        maxx  =Math.max(cnt,maxx);
    }
    let sum  =0;
  
    for(let i=0;i<ars.length;i++){
        
        if(ars[i][1]===maxx){
          
               sum+=(ars[i+1][0]-ars[i][0]);
        }
    }
 
    return maxx+" "+sum;

}


console.log(get([[2,6],[3,7],[9,10]]));

 

标签:map,maxx,Map,交集,get,问题,ar,let,区间
From: https://www.cnblogs.com/tingtin/p/17208259.html

相关文章

  • 线程死锁问题以及递归锁解法
    fromthreadingimportThread,Lock,RLockimporttimemutexA=Lock()muteXB=Lock()'''#将上述的mutexA=Lock()mutexB=Lock()#换成mutexA=mutexB=RLoc......
  • C++中类大小的问题
    文章目录​​1.C++类大小问题​​​​2.虚继承和虚函数混合使用类大小​​1.C++类大小问题eg:#include<iostream>usingnamespacestd;classa{};classb{};classc:publi......
  • 项目立项前思考的9个关键问题
    立项是项目启动的一个标志,一旦立项,那么项目组所有的人都得为项目目标和自己的承诺负责。也就是说,立项具有非常强的时间节点概念,这也是项目经理最关注的问题之一。那么,如何才......
  • 跳水运动员排名问题
    题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果a选手说:b第二,我第三;b选手说:我第二,e第四;c选手说:我第一,d第二;d选手说:c最后,我第三;e选手说:我第四,a第一:......
  • 外边距塌陷问题
    外边距塌陷(合并):指的是垂直方向上的margin相遇,会重叠取最大值而不是两者之和。主要有两种情况:兄弟容器之间/父子容器之间解决方法:1)兄弟容器之间,只给其中一个设置margin......
  • 综合案例常见问题
    1.报找不到类SqlSessionUtil或者未初始化【1】target目录下是否有该类【2】解决问题:执行maven的clean命令重构项目2.mybatis映射文件【1】映射文件中的namespa......
  • Codeforces Round #666 (Div. 2)D. Stoned Game(博弈问题)
    problemT和HL玩游戏,n堆石头,玩家轮流在石堆中选择一个(但不能是上一个人取的那堆)取一个石子一旦有一方不能取石头则判输solution统计所有石头数,如果总数小于mx(最多石头的一堆)......
  • Win10安装Ubuntu20双系统后无法引导windows问题恢复
    经常用老毛桃装系统,也装过很多次Ubuntu+windows双系统,但是对系统启动的原理却一直没搞清楚。这次就遇到了棘手的问题:装完Ubuntu之后,开机的引导选项里没有windowsbootman......
  • Android RecyclerView异步更新数据导致的崩溃问题
          AndroidRecyclerView异步更新数据导致的崩溃问题 之前写极光即时通讯UI的时候,发现的问题,今天突发奇想,来分享给大家.问题症状:如果绑定的集合List中......
  • Android WebView重定向链接无法显示的问题
    最近在网上看到一些这样的帖子,但是大多都无法解决重定向重排版链接的加载问题我这边给出一个最终解决方案,绝对比任何复杂的方式可靠何为重定向链接?当用户或​​搜索引擎......