二分搜索的拓展用法

top K 总结与分析,其基础方法以及一些拓展问题 这是一道非常经典的题,在实际中有非常广泛的应用。 在这里做出一些总结。 文章目录常见的几种方法1. 直接排序3. 基于快排的分治法4. 二分搜索5. 空间换时间6. 堆海量数据拓展问题 常见的几种方法 1. 直接排序 看到问题的直观想法就是排序,排完序取前k个便是top k。 有许多排序方法,如快排、堆排,平均复杂度为O(N * log2N) 不过实际上找出top k个数我们并不需要对后 N-K ... 阅读详情

二分搜索的拓展用法

二分搜索想必大家比较熟悉了,这里给出两道二分搜索的变形的题目。

<span style="font-size:18px;">public class BinarySearch {
	/*
	 * 题目一:
	 * 给定一个未排序的数组,使用二分搜索的方法查找其中最大的那个数(求最小的方法一样)
	 */
	/**
	 * 
	 * @param a 要查找的最大值所在的数组
	 * @param n 数组的最大范围
	 * @param st 要查找的开始坐标
	 * @param end 要查找的终结坐标
	 * @return 最大值
	 */
	private static int search(int[] a,int n,int st,int end){
		if(n==1){
			return a[st];
		}
		int mid = (st+end)/2;
		int num1 = search(a,n-n/2, st, st+mid);
		int num2 = search(a, n/2,mid+1, end);
		return num1>num2?num1:num2;
	}
	/*
	 * 题目二:
	 * 设a[0:n-1]是已排好序的数组。改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素的位置j。
	 * 当搜索元素在数组中时,i和j相同,均为x在数组中的位置
	 */
	static int i,j;
	/**
	 * 
	 * @param a 已经排好序的数组
	 * @param n 数组中元素的个数
	 * @param x 要查找的数
	 */
	private static void search2(int[] a,int n,final int x){
		int left=0;
		int right = n-1;
		while(left<=right){
			int middle = (left+right)/2;
			if(x==a[middle]){
				i = j = middle;
				return;//找到了该元素即结束查找
			}else if(x>a[middle]){
				i = middle;
				left = middle+1;
			}else{
				j = middle;
				right = middle-1;
			}
		}
	}
	public static void main(String[] args){
		/*************题目一*****************/
		int[] a = {3,1,7,5,9};
		int max = search(a,4, 0, 4);
		System.out.println(max);
		/*************题目二*****************/
		int[] b = {1,4,6,9,13,16};
		search2(b, 6, 8);
		System.out.println("i="+i+" j="+j);
	}
}</span>


LeetCode:300 最长上升子序列 O(nlog(n))解法 动态规划/二分搜索 题目 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 来源:力扣(L... 阅读详情

相关推荐

设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

设a[0:n-1]是已排好序的数组.请改写二分搜索算法,使得当被搜索元素x不在数组中时,返回小于x的最大元素...

主要是对二分法的改写,如果熟悉二分法就非常简单。 具体代码如下: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; //二分法查找 int search(int a[],int length, int x) //a是搜索数组,x为搜索元素 { int i = 0, j = 0; int detection = -1;//标志位...

MADE_哒哒 2万+

二分搜索 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。

改写二分搜索算法:设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在

import java.util.Scanner; public class di { public static void main(String[] args) { // TODO Auto-generated method stub Scanner s=new Scanner(System.in); int n=s.nextInt(); int x=s.nextInt(); int [] nums = new int [n]; for(int i=0;i<n;i++){ n.

qq_60093907的博客 3745

DSSAT模型建模教程

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。现有版本V4.7能模拟27种主要农作物的生长发育和产量形成过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。如果你是个模型入门者,这次将让你体验一键模拟的乐趣。

weixin_55561616的博客 1413

【Chipyard】Gemmini快速上手

Gemmini 加速器在 ResNet50 推理任务中表现出计算密集型优势,核心操作周期分布符合深度学习模型特征,推理预测流程完整且测试通过,为后续硬件优化和模型部署提供了有效参考。

2356

【二分搜索技术】“递归与分治策略”——《算法设计与分析(第五版)》

【二分搜索技术】“递归与分治策略”——《算法设计与分析(第五版)》

NI‘CE’XIAN‘s blog 1334

Maya vray 3S皮肤材质球设置与材质节点连接

Maya vray 3S皮肤材质球设置与材质节点连接

WETQETF的博客 2697

算法设计--改写二分搜索算法

问题描述 设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。 代码: #include&lt;stdio.h&gt; #define N 1000 int a[N],n; void BinarySearch(int left,int right,in...

a13683857889的博客 3438

Linux下科大讯飞离线语音识别SDK从下载到实战(附常见问题解决)

本文详细介绍了在Linux系统下,如何从科大讯飞开放平台获取离线语音识别SDK,完成环境准备、编译部署到实战开发的完整流程。文章重点解析了SDK目录结构、语法词典定制、示例代码修改,并针对开发中常见的“词典加载失败”、音频格式、交叉编译及性能优化等问题提供了深度解决方案,助力嵌入式与IoT开发者快速实现稳定可靠的离线命令识别功能。

honey的博客 1241

苹果开发者账号注册指南:解决Apple Developer app证件验证失败问题

本文详细解析了苹果开发者账号注册中证件验证失败的常见原因与解决方案。核心在于确保Apple ID、设备与iCloud信息一致,并提供了从官方支持联系到材料准备的全流程操作指南,帮助开发者高效解决“未能验证证件”问题,顺利完成注册。

weixin_29232507的博客 2229

二分搜索及其问题拓展

二分搜索是适用于有序数组的高效搜索方式,本文先介绍二分搜索的递归和非递归形式,然后将其拓展到类似问题。 1. 二分搜索的基本实现 1.1 递归实现 1.2 非递归实现 2. 二分搜索的问题拓展 2.1 2.2 模糊边界问题 ...

guofei_fly的博客 375

Calibre 3Dstack Flow Example(5-2)

本文详细介绍了Calibre3DSTACK工具在3D-IC设计验证中的应用。主要内容包括:1)连通性检查(LVS)规则编写,重点说明connected命令的使用方法和多文本标签处理;2)设计规则检查(DRC)实现,涵盖层间距检查和焊盘重叠检查;3)系统网表生成器操作流程,从芯片导入到网连通性定义;4)两种规则文件语法(扩展语法和传统语法)的编写示例;5)验证报告文件格式解析。通过具体案例演示了如何建立完整的3D-IC验证流程,包括芯片定义、装配操作、电气连接验证和物理规则检查等关键步骤,为3D-IC设计验证

u013620135的博客 2336

算法学习笔记——专题拓展3:二分搜索

i)C++中找到向量的最大元素的迭代器:max_element( vector.begin(), vector.end()), 取最大值还需要加*II)C++中的求数组元素和,accumulate(vector.begin(), vector.end(), 0), 0表示初始值。

m0_61940795的博客 447

Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习

该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。

一位不是很硕的鉴伪方向硕士 5494

白鲸优化算法(BWO)详解:从生物灵感 to 工程实践

白鲸优化算法(BWO)是一种新型的群体智能优化算法,模拟白鲸的游泳、捕食和鲸落行为。该算法通过平衡因子控制探索与开发阶段的转换:探索阶段采用正弦/余弦函数模拟白鲸的同步游泳,开发阶段引入莱维飞行增强局部搜索,鲸落阶段通过随机更新避免局部最优。BWO具有参数少、实现简单、收敛速度快等优点,已在多个优化问题上展现出优异性能。其数学模型将白鲸的三种核心行为抽象为位置更新公式,实现了全局搜索与局部开发的自然平衡。

qq_42212808的博客 290

二分搜索法(思维拓展)

定义:   二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。 简单用途:   从有序数组中查找某个值,这是一开始学习二分搜索的经典例子。 拓展用途:   用于求最优解的问题,如:满足某个条件C(x)的最小(最大)x。   首先我们将区间的左端点初始化为不满足C(x)的值,右端点初始化为满足C(x)的值。然后每次取中点mid = (L+R)/2,判断C(mid)是否...

Mr__Charles的博客 548

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

二分搜索

心得摘要 二分搜索的使用背景应该是单调区间,通常以左闭右闭递增区间为例 使用二分搜索时,心中把区间分为三个部分[left,mid-1],mid,[mid+1,right],然后确定在哪个部分继续二分搜索即可 终止边界为:找到该数或者左边界值严格大于右边界值 一般的二分查找(非递归)代码如下: #include <iostream> using namespace std...

qq_37657182的博客 173

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【算法训练】二分搜索的拓展应用

根据labuladong算法小抄里东哥的总结。有一系列的问题都可以用二分搜索的泛化来解决。 首先需要从题目中抽象出一个自变量x,一个关于x的函数f,以及一个目标值target 同时这三个元素得满足以下条件 (1)f必须是x上的单调函数,单调递增或者单调递减都可以 (2)题目是让你计算满足约束条件的f(x)==target时的x的值。 下面以例题来帮助理解加深这一思路。 一、爱吃香蕉的珂珂 875 1、分析 可以看到该题是满足我们开头说的条件的。自变量就是吃香蕉的速度k,然后写一个以k为自变量,然后吃完.

GUANYX的博客 321

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

006、二分搜索

所谓寻找峰值其实就是寻找数组中的极大值,即一个位置 ans 的数满足 arr[ans] > arr[ans+1] && arr[ans]> arr[ans-1]因此可以使用二分查找快速找到。:这里的峰值可以类比到。

m0_57877510的博客 425

二分搜索编程题自我总结

终止条件的必然性:理解 “left>right” 是 “目标值不存在” 的唯一判定标准 —— 无论目标值比序列所有元素大(如在示例序列中搜索 50,最终left=n+1、right=n),还是比所有元素小(如搜索 1,最终left=1、right=0),都会触发该条件,无需额外判断。抽象思维的拓展不足:仅局限于题目中的 “升序序列、位置从 1 开始” 的场景,若题目改为 “降序序列” 或 “数组下标从 0 开始输出”,初期需重新梳理逻辑,说明对二分搜索核心逻辑的灵活应用能力仍需锻炼。

2502_94187716的博客 528

[经典算法]二分搜索总结

前情提要: 之前并没有对二分进行一个详细的归类总结,这次借着大佬的博客和相关参考进行梳理总结,并且对题目进行一个归类记录,便于刷题复习; ...

m0_66776925的博客 166

数据结构(五)--二分搜索树

(一)树相关的知识 (a)为什么要有树结构? 1.树结构本身是一种天然的组织结构,计算机中的目录,公司的架构就是一种树结构 2.将数据使用结构存储后,出奇的高效 (b)二叉树:和链表一样,是一种动态数据结构 class Node{     E  e;     Node left;   左孩子     Node right;  右孩子 }    (c)二叉树的特点: (1)二叉树具有唯...

JayBillions的博客 395

【数据结构与算法】二分搜索入门

非常经典的一道题目,这个二分条件比较难思考,有点像数学里面的极值点,最关键的条件在于,数组中相邻元素不等,想象一条函数曲线,如果相邻元素不等,那么就意味着曲线是“光滑”的,左边上升右边下降,则中间必然会存在峰值(极值)。2.如不是,那么开头必然上扬,结尾必然下降,中间又没有相等的点,所以根据费马引理,必然存在极值点,根据这个条件,那我就可以卡着中点看一下,进行二分的操作,这是非常非常巧妙的思想。下面的文件给出了所有的解答,全部是我写的,难的地方标记有详细的注释。峰值162T,在无序数组上也能二分!

m0_73104158的博客 423
上一篇: android debug:Unable to add window -- token null is not for an application
下一篇: Thread.java start方法和run方法的区别
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值