c_cpp 二元搜索 - 圆形旋转阵列的应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 二元搜索 - 圆形旋转阵列的应用相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>

#define min(x,y) x<y?x:y

using namespace std;

int min_index(int a[],int n){
	int low=0,high=n-1;
	while(low<=high){
		if(a[low]<=a[high])
		return low;
		int mid = (low+high)/2;
		int next=(mid+1)%n,prev=(mid+n-1)%n;
		if(a[next]>=a[mid] && a[prev]>=a[mid])
			return mid;
		else if(a[mid]<=a[high])
				high=mid-1;
			else if(a[low]<=a[mid])
				low=mid+1;
	}
	return -1;
}

int main()
{
	int n,i=0;
	cin>>n;
	int a[n];
	while(i<n)
		cin>>a[i++];
	int index = min_index(a,n);
	int final_index =min(index,(n-index)%n);
	cout<<final_index<<endl;
	return 0;
}

/*
(1)
Input-
5
5 1 2 3 4
Output-
1

(2)
Input-
5
2 3 4 5 1
Output-
2
*/

以上是关于c_cpp 二元搜索 - 圆形旋转阵列的应用的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 189.旋转阵列 - 难度容易 - 2018.9.4

c_cpp 搜索已排序和旋转的数组中的元素

java 最大连续和圆形阵列

阵列信号处理——旋转不变技术(ESPRIT)

c_cpp 阵列

c_cpp 384.随机播放阵列