二分查找2(c++)

概念

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

题目练习

(续上一篇,如需了解上一篇题目,请移步主页观看)

查找最近的元素

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

int n,m;
ll a[100010];

int main()
{
	
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	
	cin>>m;
	while(m--)
	{
		int x;
		cin>>x;
		int l = 1;
		int r = n;
		int res;
		while(l<=r)
		{
			int mid = (l+r)/2;
			if(a[mid]==x)
			{
				res = a[mid];
				break;
			}
			else if(a[mid]>x) r = mid-1;
			else if(a[mid]<x) l = mid+1;
			int res2 = abs(res-x);
			int mid2 = abs(a[mid]-x);
			if(res2>=mid2)
			{
				res = a[mid];
			}
		}
		cout<<res<<" ";
	}
	
	return 0;
}

二分法求函数零点

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

int a,b,c,d,e,f;

int main()
{
	a = 1;
	b = -15;
	c = 85;
	d = -225;
	e = 274;
	f = -121;
	double l = 1.5;
	double r = 2.4;
	double res;
	while(r-l>0.0000009)
	{
		double mid = (l+r)/2;
		double midx = 1.0*a*mid*mid*mid*mid*mid+1.0*b*mid*mid*mid*mid+1.0*c*mid*mid*mid+1.0*d*mid*mid+1.0*e*mid+1.0*f;
//		cout<<l<<" "<<mid<<" "<<r<<" "<<midx<<endl;
		if(midx==0) res = mid;
		else if(midx>0) l = mid+0.000001;
		else if(midx<0) r = mid-0.000001;
		res = mid;
	}
	cout<<fixed<<setprecision(6)<<res;
	
	return 0;
}
相关推荐
JieE2125 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4563 天前
C++进阶(1)——前景提要
c++