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

牛客.空调遥控二分查找牛客.kotori和气球(数学问题)力扣.二叉树的最大路径和牛客.主持人调度(二)

目录

 牛客.空调遥控

二分查找

牛客.kotori和气球(数学问题)

力扣.二叉树的最大路径和

牛客.主持人调度(二)


 牛客.空调遥控

枚举n个空调之后,使数组有序,左右下标,用二分查找,然后一个求

长度就好

二分查找

/二分理解,+k-p<=a[i]      ||a[i]<=k+p

然后剩下的就是二分美学,细节很多

假如我们求的是区间的话,是要注意left<right,然后看,他的求mid的条件,求的是左端点

假如left+(right-left+1)/2 ,求的是右端点

import java.util.*;
import java.io.*;
public class Main{public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in=new Read();public static void main(String[] args) throws IOException {Read in = new Read();int n=in.nextInt();int p=in.nextInt();int[]a=new int[n];//  a[i]<=p+k  ||  k-p <=a[i]for(int i=0;i<n;i++){a[i]=in.nextInt();}int ret=0;// 1 2 3 4 5 6Arrays.sort(a);for(int i=0;i<n;i++){int k=a[i];//以当前值为k,二分 求的一个大于等于,一个小于等于int left=0;int right=n-1;//比如求左端点 大于等于左边while(left<right){int mid=left+(right-left)/2;//二分理解,+k-p<=a[i]if(a[mid]>=k-p){right=mid;}else{left=mid+1;}}int nowLeft=left;left=0;right=n-1;while(left<right){int mid=left+(right-left+1)/2;if(a[mid]<=p+k){left=mid;}else{right=mid-1;}}ret=Math.max(ret,right-nowLeft+1);}System.out.print(ret);}
}class Read{public StringTokenizer st=new StringTokenizer("");public BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));public String next()throws IOException{while(!st.hasMoreTokens()){st=new StringTokenizer(bf.readLine());}return st.nextToken();}public String nextLine()throws IOException{return bf.readLine();}public int nextInt()throws IOException{return Integer.parseInt(next());}public long nextLong()throws IOException{return Long.parseLong(next());}    
}

   //【k-p,k+p】      换句话说,最大值-最小值在2p区间内,因此选择一个滑动窗口

import java.util.*;
import java.io.*;
public class Main{public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in=new Read();public static void main(String[] args) throws IOException {Read in = new Read();int n=in.nextInt();int p=in.nextInt();int[]a=new int[n];//  a[i]<=p+k  ||  k-p <=a[i]for(int i=0;i<n;i++){a[i]=in.nextInt();}int ret=0;// 1 2 3 4 5 6Arrays.sort(a);//以当前值为k,二分 求的一个大于等于,一个小于等于int left=0;int right=0;while(right<n){while(a[right]-a[left]>2*p){left++;}ret=Math.max(ret,right-left+1);right++;}System.out.print(ret);}
}class Read{public StringTokenizer st=new StringTokenizer("");public BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));public String next()throws IOException{while(!st.hasMoreTokens()){st=new StringTokenizer(bf.readLine());}return st.nextToken();}public String nextLine()throws IOException{return bf.readLine();}public int nextInt()throws IOException{return Integer.parseInt(next());}public long nextLong()throws IOException{return Long.parseLong(next());}    
}

kotori和气球

牛客.kotori和气球(数学问题)

6中气球摆5个位置,第一个没有限制,有几种几种和

6 5 5(只要和前面的不同就行) 5 5      这我怎么想不出来? 狠狠压麻袋住了

n*(n-1)*(n-1) xxx 一共m-1个n-1 ,感觉最近做模拟做的有点傻,都不会数学了。

import java.util.*;
public class Main{public static void main(String[]args){Scanner in=new Scanner(System.in);int n=in.nextInt();int m=in.nextInt();int p=109;long count=1;for(int i=0;i<m-1;i++){count=count*(n-1)%p;      }System.out.print(count*n%p);}
}

力扣.二叉树的最大路径和

题没啥参考价值,直接看样例,

左子树是一个,以左子树为跟的最大单链和,

右子树也一样,以右子树为跟的最大单链和。

    int max = -100000;
public int maxPathSum(TreeNode root) {if (root == null) return 0;maxSum(root);return max;}public int maxSum(TreeNode root) {if (root == null) return 0;int left = Math.max(maxSum(root.left),0);int right =Math.max(maxSum(root.right),0);max = Math.max(left + right + root.val, max);return Math.max(left, right) + root.val;}

牛客.主持人调度(二)

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 计算成功举办活动需要多少名主持人* @param n int整型 有n个活动* @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间* @return int整型*/public int minmumNumberOfHost(int n, int[][] a) {Arrays.sort(a, (m, k) -> {if (m[0] == k[0]) return Integer.compare(m[1],k[1]);return Integer.compare(m[0] , k[0]);});//全程升序PriorityQueue <Integer>q=new PriorityQueue<>();for (int i = 0; i < n; i++) {//从当前位置开始计算,看看有几个冲突,取冲突的最大值,就是需要的主持人个数//存右边的边界值if(q.isEmpty())q.add(a[i][1]);else{//[-6,-1][-4,-3][-2,2][1,6][1,7] [7,8]if(q.peek()<=a[i][0]){//能连接,我就poll()q.poll();}q.add(a[i][1]);                  }}return q.size();}
}

http://www.dtcms.com/a/326328.html

相关文章:

  • 数集相等定义凸显解析几何几百年重大错误:将无穷多各异点集误为同一集
  • 免费好用的数字人API
  • 使用dockge 安装 photoprism
  • 最短路问题从入门到负权最短路
  • elasticsearch的高可用
  • 【van-field 会记录上次选择并以悬浮弹窗再次展示】
  • 18.5 BERT评估指标终极指南:HuggingFace实战提升文本分类效果
  • office卸载不干净?Office356卸载不干净,office强力卸载软件下载
  • 爬虫与数据分析结合案例学习总结
  • Note4:Self-Attention
  • AI Agent平台大PK:Dify与开源Coze的差异化对比分析
  • 机器学习-决策树(DecisionTree)
  • Hot100合集
  • 金蝶云星空 × SRM 深度集成实战(附完整接口清单)
  • 关于线性DP模板
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(1)
  • [Ubuntu] xrdp共享连接 Ubuntu 屏幕 | xfce4
  • 建筑兔零基础python自学记录119|数据处理(4)-23
  • 需求列表如何做层级结构
  • Redis类型之Hash
  • 重学前端009 --- 响应式网页设计 CSS 伪选择器
  • 订单簿价格冲击模型与机器学习在大单策略中的融合
  • 元数据管理与数据治理平台:Apache Atlas 基本搜索 Basic Search
  • Apache Ignite分片线程池:高并发保序新方案
  • MCU 软件断点注意事项!!!
  • 【数据结构入门】树
  • 基于Go-Zero框架实现的小demo
  • 爬虫和数据分析相结合案例
  • 软件开发:一场精密的生命构建
  • 疯狂星期四文案网第36天运营日记