左移递减数列查找某一个数

原创 2012年03月29日 17:00:06
48.微软(运算):
一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}
是由{6,5,4,3,2,1}左移两位形成的,在这种数组中
#include<iostream>
#include<cassert>
#include<stack>
using namespace std ;
int FindNumberInLeftShiftSequence(int *A,int nLen,int expectedNum)
{
	assert(A!=NULL&&nLen>0);
	int start=0;
	int end=nLen-1;
	while(start<=end)
	{
		int mid=start+((end-start)>>2);
		if(expectedNum==A[mid])
			return mid;
		if (A[mid]<A[start])
		{
			if(expectedNum>A[mid])
				end=mid-1;
			else 
				start=mid+1;
		}
		else if(A[mid]>A[start])
		{
			if(expectedNum<A[mid])
				start=mid+1;
			else
				end=mid-1;
		}
		else
		{
			for (int i=start;i<mid;i++)
			{
				if(A[i]==expectedNum)
					return i;
			}
			start=mid+1;
		}
	}
	return -1;
}
int main()
{
	int A[]={6,5,4,3,2,1};
	int nLen=sizeof(A)/sizeof(int);
	cout<<FindNumberInLeftShiftSequence(A,nLen,0)<<endl;
	int B[]={1,1,1,1,0,1};
	int nLen2=sizeof(B)/sizeof(int);
	cout<<FindNumberInLeftShiftSequence(B,nLen2,0);
	return 1;
}

相关文章推荐

算法习题48:一个数组是由一个递减数列左移若干位形成的,在这种数组中查找某一个数。

微软: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。  ------------------...
  • ylf13
  • ylf13
  • 2013年11月07日 09:49
  • 805

45.递减左旋数列中查找一个数

题目:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}克移两位形成的,在这种数组中查找某一个数。   思路:在此序列不断二分的过程中,由于原序...

判断一个数是否存在于一个非递减的有序数列中 算法(Ordered Search Problem)

1. Description Given a list of  n numbers in non-decreasing order A={a1,a2,⋯,an} such that a1≤...

12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。

/************************************************************************/ /* 12、一个整数数列,元素取值可能是0~655...

团体程序设计天梯赛-练习集 L2-014. 列车调度 构造非递减数列二分查找

L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火...

码农小汪-剑指Offer之9 - 二进制中1的个数 算数右移 逻辑左移

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路:刚开始想法是,不断的进行右移进行与1与运算的话,我们的题目就可以解决了这个问题! 但是我们的负数的时候,进行右移...

选择排序与查找数组最大的一个数并移动到数组的最后

一 :查找数组最大的一个数并移动到数组的最后    1 显示效果       2 代码 #include //打印数组 void PrintArray(int a[], int len) { ...

【面试题】给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中

看到这样一道面试题,我们不由的想到前边学习过的哈希表,哈希表查找效率高,唯独就是 空间浪费有点大。而在这道题目之中,40亿个无符号数(表明最高位表示大小),几乎涵盖了整形里的所有的数(总共42亿9千多...

查找一个数的二进制形式中‘1’的个数

/* **查找一个数的二进制形式中‘1’的个数** */ # include int main(void) {     int i, j, k = 31;     int a[32];     in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:左移递减数列查找某一个数
举报原因:
原因补充:

(最多只允许输入30个字)