新手求助C++最后一个点TL了
查看原帖
新手求助C++最后一个点TL了
584188
Maugham21013079楼主2021/11/23 21:05
#include<iostream>

using namespace std;

int search(long long nums[], int size, int target,int ans)
{
	int left = 0;
	int right = size; //定义target在左闭右开的区间里,即[left, right)
	while (left < right) 
	{	//因为left = right的时候,在[left, right)区间上无意义
		int middle = left + ((right - left) / 2);
		if (nums[middle] > target) 
		{
			right = middle; //target 在左区间,在[left, middle)中 
		} 
		
		else if (nums[middle] < target) 
		{
			left = middle + 1;
		} 
		
		else
		{
			ans=middle+1;
			for(int i=ans-1;i>=0;i--)
			{
				if(nums[i]==nums[ans-1])
				{
					ans=i+1;
				}
				else
					break;	
			}
			cout<<ans<<" ";
			return middle;
		}
	} 
    // 没找到就返回-1
	ans=-1;
	cout<<ans<<" ";
	return -1;
}


int main()
{
	int n,m;
	cin>>n>>m;
	long long a[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	
	int target,ans=0;
	while(m>0)
	{
		cin>>target;	
		search(a,n,target,ans);
		m--;
	}
	
	
	return 0;
}

求大佬解答

2021/11/23 21:05
加载中...