程序员面试题--旋转数组中的拐点元素

本文探讨了如何解决程序员面试中遇到的旋转数组找拐点元素问题。在给定的有序数组旋转后,如何找到最小值。代码实现过程中,通过测试用例发现原算法存在不足,进而提出改进方案,确保在数组包含重复元素时也能正确找到最小值。
摘要由CSDN通过智能技术生成

题目:把一个有序数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。例如数组A={1,2,3,4,5,6},旋转后得B={3,4,5,6,1,2},该数组的最小值为1。现在输入递增数组的旋转,输出旋转数组的最小值。

针对上面的问题,我们很清楚的知道,输入数组的前半部分和后半部分都是有序的,并且前半部分>=后半部分。根据这样的特性我们就行写出代码。

//求出一个数组中的拐点  length是数组的长度
int getDot(int data[],int length)
{
	if(data==NULL)
		return 0;

	int i=0,j=length-1;
	int flag=false;
	while(i<j)
	{
		if(data[i]>data[j])
		{
			i++;
		}
		else if(data[i]<data[j])
		{
			j--;
		}
		else if(data[i]==data[j])
		{
			i++;
			j--;
		}
	return i;
}
上面返回的是拐点的位置。

这样写有没有问题呢?

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值