二分查找(c++)

概念

二分查找是分治算法的一种

题目练习

查找第一个大于等于target的数据

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n,a[10010];

int erfen(int,int,int);
int main()
{
	
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	
	int target;
	cin>>target;
	cout<<erfen(target,0,n-1)<<endl;
	
	return 0;
}
int erfen(int target,int l,int r)
{
	int res = n-1;
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(a[mid]<target) l = mid+1;
		else if(a[mid]>=target)
		{
			res = mid;
			r = mid-1;
		}
	}
	return res;
}

查找最后一个小于等于target的数据

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[10010];

int erfen(int,int,int);
int main()
{
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	int target;
	cin>>target;
	cout<<erfen(target,0,n-1);
	
	return 0;
}
int erfen(int target,int l,int r)
{
	int res = 0;
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(a[mid]>target) r = mid-1;
		else if(a[mid]<=target)
		{
			res = mid;
			l = mid+1;
		}
	}
	return res;
}

平方根计算

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;


float erfen(float,float,float);

int main()
{
	
	float target;
	cin>>target;
	cout<<erfen(target,0.001,target);
	
	return 0;
}
float erfen(float target,float l,float r)
{
	float res = 0;
	while(l<=r)
	{
		float mid = (l+r)/2;
		int mid2 = mid/0.001;
		mid = mid2*0.001;
//		cout<<l<<" "<<mid<<" "<<r<<endl;
//		system("pause");
		if(mid*mid>target) r = mid-0.001;
		else if(mid*mid<target) l = mid+0.001;
		if(mid==res) return res;
		res = mid;
	}
	return res;
}
相关推荐
zyl76512 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖16 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌16 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
WJ.Polar16 小时前
Java封装、继承、多态
java·开发语言
摇滚侠16 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
OPEN-F17 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791317 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins17 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)17 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
爱读书的小胖17 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言