为什么会有超时和wa
查看原帖
为什么会有超时和wa
1172084
ocean_of_life楼主2023/11/13 17:19

为什么我写了两个二分查找都会超时

int binsearch2(int arr[], int low, int high, int key)//迭代版本
{
	int mid;
	while (low <= high)
	{
		mid = low + (high - low) / 2;
		if ((arr[mid] == key))
		{
			while (arr[mid - 1] == arr[mid])
			{
				mid--;
			}
			break;
		}
		if (arr[mid] > key)
			high = mid - 1;
		else
			low = mid + 1;
	}
	if (low > high)
		mid = -2;
	return mid;
	
}
int binsearch1(int arr[], int low, int high, int key)递归版本
{
	if (low > high)
		return -2;//找不到就返回-2
	int mid = low + (high - low) / 2;
	if (arr[mid] == key) 
	{
	    while (arr[mid - 1] == arr[mid])
	    {
		    mid--;
	    }
	    return mid;
    }
	else if (arr[mid] > key)
		return binsearch1(arr, low, mid - 1, key);
	else
		return binsearch1(arr, mid + 1, high, key);
}
#include<iostream>
using namespace std;
int arrn[1000005];
int main()
{
	unsigned int n, m, q;
	
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		scanf("%d",&arrn[i]);
	}
	for (int i = 0; i < m; i++)
	{
		scanf("%d", &q);
		int ans = binsearch1(arrn, 0, n - 1, q);
		printf("%d ", ans + 1);
	}
	
	return 0;
}

![这个是迭代的结果]("C:\Users\liang\Pictures\Screenshots\屏幕截图 2023-11-13 171226.png")

![递归的结果]("C:\Users\liang\Pictures\Screenshots\屏幕截图 2023-11-13 171648.png")

两个代码都是用二分查找找到目标元素,之后用一个while找到目标下标

2023/11/13 17:19
加载中...