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

【Java】零基础蓝桥杯算法学习——二分查找

算法模板一:

// 数组arr的区间[0,left-1]满足arr[i]<k,[left,n-1]满足arr[i]>=k;Scanner scan = new Scanner(System.in);int[] arr = {1,2,3,4,5};int left = 0,right = arr.length-1;int k = scan.nextInt();while(left<right) {//left==right时退出循环int mid = (left+right)/2;//当区间长度为偶数时,mid取区间靠左端点if(arr[mid]>=k) right = mid;else left = mid+1;}

算法模板二:

// 数组arr的区间[0,left]满足arr[i]<=k,[left+1,n-1]满足arr[i]>k;Scanner scan = new Scanner(System.in);int[] arr = {1,2,3,4,5,6};int left = 0,right = arr.length-1;int k = scan.nextInt();while(left<right) {//left==right时退出循环int mid = (left+right+1)/2;//当区间长度为偶数时,mid取区间靠右端点if(arr[mid]>k) right = mid-1;else left = mid;}

例题一:蓝桥杯2018真题:递增三元组

输入示例:

3

1 1 1

2 2 2

3 3 3 

输出示例:27

代码示例:

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] a = new int[n];int[] b = new int[n];int[] c = new int[n];for(int i=0;i<n;i++) a[i] = scan.nextInt();for(int i=0;i<n;i++) b[i] = scan.nextInt();for(int i=0;i<n;i++) c[i] = scan.nextInt();Arrays.sort(a);Arrays.sort(b);Arrays.sort(c);int[] B = new int[n];for(int i=0;i<n;i++) {int l=0,r=n-1;while(l<r) {int mid = (l+r)/2;if(c[mid]>b[i]) r=mid;else l=mid+1;}if(c[l]>b[i]) B[i]=n-l;}long[] sum = new long[n+1];for(int i=1;i<=n;i++) sum[i]=sum[i-1]+B[i-1];long ans=0;for(int i=0;i<n;i++) {int l=0,r=n-1;while(l<r) {int mid = (l+r)/2;if(b[mid]>a[i]) r=mid;else l=mid+1;}if(b[l]>a[i]) ans+=(sum[n]-sum[l]);}System.out.println(ans);scan.close();}
}

例题二:蓝桥杯2017真题:分巧克力

 输出:2

代码示例:

import java.util.Scanner;
public class Main {public static void main(String[] args)  {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int k = scan.nextInt();int[] h = new int[n];int[] w = new int[n];for(int i=0;i<n;i++) {h[i]=scan.nextInt();w[i]=scan.nextInt();}int l=0,r=(int)1e5;while(l<r) {int mid=(l+r+1)/2;if(check(mid,h,w,k))  l=mid;else r=mid-1;}System.out.println(l);scan.close();}public static boolean check(int mid,int[] h,int[] w,int k) {int ans=0;for(int i=0;i<h.length;i++) {int res = (h[i]/mid)*(w[i]/mid);ans+=res;}return ans>=k;}
}

相关文章:

  • python从入门到精通(二十):python的exe程序打包制作
  • Sentinel 流控-关联模式
  • LeetCode:67.二进制求和
  • InternLM大模型实战-3.InternLM+Langchain搭建知识库
  • Map和Set(哈希表)
  • 【OpenHarmony硬件操作】风扇与温湿度模块
  • DarkSide针对VMware EXSI系统进行加密
  • CTR-----Click-Through Rate简单介绍
  • ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎
  • 再说开源软件
  • 年假作业10
  • 【数据结构】11 堆栈(顺序存储和链式存储)
  • java客运管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • TCP和UDP相关问题(重点)——9.超时重传怎么实现的?
  • Docker- chapter 1
  • 分享一款快速APP功能测试工具
  • 【刷算法】从上往下打印二叉树
  • CentOS 7 修改主机名
  • HashMap ConcurrentHashMap
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JS学习笔记——闭包
  • magento2项目上线注意事项
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Mysql数据库的条件查询语句
  • spring security oauth2 password授权模式
  • Terraform入门 - 3. 变更基础设施
  • 对象管理器(defineProperty)学习笔记
  • 技术:超级实用的电脑小技巧
  • 开源地图数据可视化库——mapnik
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 算法-插入排序
  • const的用法,特别是用在函数前面与后面的区别
  • Spring第一个helloWorld
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)Java 简介
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)PySpark3:SparkSQL编程
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)Linux 多线程条件变量同步
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • //解决validator验证插件多个name相同只验证第一的问题
  • /bin/rm: 参数列表过长"的解决办法
  • @WebServiceClient注解,wsdlLocation 可配置
  • [C++]C++类基本语法
  • [codevs1288] 埃及分数
  • [COI2007] Sabor
  • [Dxperience.8.*]报表预览控件PrintControl设置