二分算法详、

二分的概念

二分算法:是用来在一个有序数组中查找一个元素的算法。时间复杂度O(log n)

二分的二段性

集合中的元素有存在分界线,给定条件可以将集合中的元素分为两部分,一部分满足条件,一部分不满足条件。(不断将区间一分为二逼近端点)

1.查找当前有序数组中大于等于x的第一个数(取区间靠左的值)

int arr[]={1,2,3,4,5};
int l=0,r=arr.length-1;
int x=2;
while(l<r){int mid=(l+r)/2;//取区间中间的位置靠左的值if(arr[mid]>=x) r=mid;//区间向左缩短一半else l=mid+1;//区间向右缩短一半
}

2. 查找当前有序数组中小于等于x的最后一个数

int arr[]={1,2,3,4,5};
int l=0,r=arr.length-1;
int x=2;
while(l<r){int mid=(l+r+1)/2;//取区间中间位置靠右的位置if(arr[mid]>x) r=mid-1;//区间向左缩短一半else l=mid;//区间向右缩短一半 }

例题实战 1

问题描述

给定一个数组,其采用如下代码定义

int data[200];

for(i=0;i<200;i++){

        data[i]=4*i+6;

}

先给定某个数(data数组中),请你求出他在数组中的位置

输入描述

输入一个待查的整数(该整数一定在数组data中)

输出描述

输出该整数在数组中的指标

代码
package erfen;
import java.util.*;
public class erfen {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int res=scan.nextInt();//待查数int data[]=new int [200];for(int i=0;i<200;i++) {data[i]=4*i+6;}int l=0, r = data.length-1,mid=0;while(l<r) {mid=(l+r)/2;//中间左侧if(data[mid]>=res) {r=mid;}else {l=mid+1;}}System.out.print(l);}}

例题实战 2

问题描述

给定n个数形成一个序列a,那定义如果一个连续子序列包含序列a中所有不同元素。则该连续子序列便为蓝桥序列,现在问你,该蓝桥序列长度最短为多少

例如 1 2 2 2 3 2 2 1 ,包含3个不同的数1,2,3,而3 2 2 1符合题目要求,因此答案为4

连续子序列:从序列a中选取若干个连续的数形成一个序列叫做连续子序列

输入格式

第一行输入一个整数n,表示序列长度

第二行输入n个元素。

输出格式

输出一个整数,表示最短的蓝桥序列长度。

代码
package erfen;
import java.util.*;public class erfen2 {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();int []arr=new int[n];for(int i:arr) {arr[i]=scan.nextInt();}//去重操作Set<Integer> set=new HashSet<>();for(int i:arr) {set.add(arr[i]);}//计算a序列中的不同元素int m=set.size();//满足条件的最小个数int l=1,r=arr.length;while(l<r) {int mid=(l+r)/2;if(check(mid,arr,m)) r=mid;else l=mid+1;}System.out.println(l);}public static boolean check(int mid, int[] arr, int m) {int n=arr.length;int []f=new int [1001];int l=0;int r=0;//同向双指针int ans=0;//当前区间含有的元素个数while(r<n) {f[arr[r]]++;if(f[arr[r]]==1) {ans++;}if(r-l+1>mid) {f[arr[l]]--;if(f[arr[l]]==0){ans--;}l++;}r++;if(ans>=m) {return true;}// TODO Auto-generated method stub}return false;}
}

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

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

相关文章

官宣!眉州东坡终生认养大熊猫“星星”

2024年03月19日,眉州东坡终生认养大熊猫“星星”签约仪式暨第八届有机川熊猫竹笋节在北京和重庆同时举行。眉州东坡董事长王刚先生、重庆动物园副处长殷毓中先生等嘉宾在重庆共同出席了此次认养仪式,重庆动物园向眉州东坡授予大熊猫终生认养证书,宣布星星正式加入眉州东坡大家庭…

Game of Nodes 16进8

KNIME 还可以用成这样? 是不是有点过分了。 Tableau, PowerBI 同学请绕行&#xff0c;我们讨论的不是同一个东西... 由于 Game of Nodes 没有公开题目&#xff0c;且各个小组赛的题目也是不一样的&#xff0c;在这里我们只能通过拼接图来猜想小组赛题目了。 有的解决方案我甚至…

Android源码阅读 SharedPreferences - 1

目录 前言 正文 SharedPreferences.java PreferenceManager.java ContextImpl.java 前言 由于笔者目前水平限制&#xff0c;表达能力有限&#xff0c;尽请见谅。 SharedPreferences提供了一种轻量级的数据存储方式&#xff0c;允许保存和获取简单的键值对。它适用于保存少…

中霖教育:一级建造师和一级造价师通过率高吗?

在建筑工业领域&#xff0c;一级建造师和一级造价工程师考试都是比较热门的考试&#xff0c;每年参加的人数都非常多&#xff0c;如果只备考一个的话&#xff0c;2024年选择哪项考试更为合适? 一建和一造的平均通过率均未超过10%&#xff0c;两者难度相近&#xff1a; 1. 一…

TCP粘包问题优化

TCP粘包问题是指在使用TCP协议进行数据传输时&#xff0c;由于TCP协议本身的特性&#xff0c;可能会导致多个数据包被粘在一起发送&#xff0c;或者在接收端接收到的数据包中包含了多个独立的数据包。这种情况可能会导致数据解析出错&#xff0c;从而影响应用程序的正常运行。 …

SpringBoot 中配置日期格式

SpringBoot 中配置日期格式 这个错误提示表明在尝试将一个字符串转换成 java.util.Date 类型时失败了&#xff0c;因为字符串的格式不符合预期的日期格式。在你的情况下&#xff0c;字符串 “2024-03-14 18:55:55” 似乎不符合默认的日期格式。 解决这个问题的方法之一是告诉…

力扣刷题---岛屿问题--c++

DFS&#xff1a;深度优先遍历&#xff1a;深度优先遍历是一种优先走到底、无路可走再回头的遍历方式 我们所熟悉的 DFS&#xff08;深度优先搜索&#xff09;问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题&#xff0c;是在一种「网格」结构中进行的。岛屿问题…

源码部署LAMP架构

LAMP 文章目录 LAMP1. lamp简介2. web服务器工作流程2.1 cgi与fastcgi2.2 httpd与php结合的方式2.3 web工作流程 3. LAMP平台构建3.1 安装httpd3.2 安装mysql3.3 安装php3.4 验证 1. lamp简介 有了前面学习的知识的铺垫&#xff0c;今天可以来学习下第一个常用的web架构了。 …

【基于HTML5的网页设计及应用】——动态添加下拉菜单

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

TiDB分布式关系型数据库

TiDB分布式关系型数据库 什么是TiDBTiDB结构TiDB的热点问题 什么是TiDB TiDB 是一个开源的分布式关系型数据库&#xff0c;由 PingCAP 公司主导开发。它的设计目标是提供水平可扩展的高性能分布式事务数据库&#xff0c;同时保持与 MySQL 协议的兼容性和事务的 ACID&#xff0…

什么是增强型SSL证书?购买一张需要多少钱?

增强型SSL证书是一种提供更高级别安全验证与用户信任度的网络安全工具&#xff0c;也被称为EV证书。相较于DV&#xff08;域名验证&#xff09;和OV&#xff08;组织验证&#xff09;证书&#xff0c;它通过严格的身份核实流程确保网站所有者的合法性和真实性。 首先&#xff0…

vue事件绑定引发的性能问题

Vue事件绑定中&#xff0c;为每个动态创建的元素都基于addEventListener做了事件绑定&#xff0c;可能会导致性能问题&#xff0c;因为在绑定的方法中需要用到每次循环的信息&#xff0c;会创建多个闭包。 因为在循环中使用事件绑定会导致大量的事件监听器被创建&#xff0c;这…

【C++】string 类---字符判断与大小写转换(超详细解析!)

目录 一、string 类的介绍 二、字符大小写转换与判断常用函数 &#x1f4a6; 字符大小写判断 ① isalpha() ② isalnum() ③ isdigit() ④ islower() ⑤ isupper() &#x1f4a6; 字符大小写转换 ① tolower() ✨方法一&#xff1a; ✨方法二&#xff1a; ② toupper() ✨方…

【NLP8-Transformer】

Transformer 1、优势 相比之前占领市场的LSTM和GRU模型&#xff0c;Transformer有两个显著优势 1、Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率 2、在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 2、Transformer模型的…

【MySQL】MySQL视图

文章目录 一、视图的基本使用1.创建视图2.修改了视图&#xff0c;对基表数据有影响3.修改了基表&#xff0c;对视图有影响4.删除视图 二、视图规则和限制 一、视图的基本使用 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称…

【springboot】@SpringBootApplication 加载原理解析

从何处放入 AutoConfigurationImportSelector.selectImports AbstractApplicationContext.refresh AbstractApplicationContext.invokeBeanFactoryPostProcessors PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 此处一个关键信息 只有BeanDefinition…

Android11 HID开发系统源码配置

# RK356X_ANDROID11_CUSTOM_HID ## 1.确认SDK版本。 cat .repo/manifests/include/rk356x_repository.xml <?xml version="1.0" encoding="UTF-8"?> <manifest> <project path="device/rockchip/rk356x" name="rk/dev…

Html Open with Live Server 报错windows找不到文件

输入setting.json 填入你的浏览器路径 即可

字符串篇(三)

文章目录 1.18 islower()函数1.19 isnumeric()函数1.20 isprintable()函数1.21 isspace()函数1.22 istitle()函数1.23 isupper()函数1.24 join()函数1.25 len()函数 1.18 islower()函数 islower() 是 Python 中字符串&#xff08;str&#xff09;对象的一个方法&#xff0c;用…

【Qt】Qt代码格式化配置

这里记录一下个人使用的格式化配置: 个人使用的格式化工具Artistic Style格式化信息&#xff1a; --stylelinux #&#xff1a;Linux 风格格式和缩进 #--stylekr #indentspaces4 # 缩进采用4个空格 -A1 #使用AllMan程序风格&#xff0c;即大括号另起一行。 indent-switche…