百度面试标题:一组排好序数组,输入一个数找出这个数出现在数组(可能有多个重复数字)的首末位置,要求不能使用遍历方法
百度面试题目:一组排好序数组,输入一个数找出这个数出现在数组(可能有多个重复数字)的首末位置,要求不能使用遍历方法。
百度面试题目:一组排好序数组,输入一个数找出这个数出现在数组(可能有多个重复数字)的首末位置,要求不能使用遍历方法。
------解决思路----------------------
他的意思是一次二分找到首,一次二分找到尾?
像这样
你也可以整合成一个函数
注:这里没有对参数做安全检测
百度面试题目:一组排好序数组,输入一个数找出这个数出现在数组(可能有多个重复数字)的首末位置,要求不能使用遍历方法。
------解决思路----------------------
他的意思是一次二分找到首,一次二分找到尾?
像这样
#include <stdio.h>
//data非递减排序,n是个数,key是关键字
int head(int *data, int n, int key)
{
int s, e, m;
s = 0;
e = n - 1;
while(s <= e) {
m = (s + e) >> 1;
if(data[m] >= key)
e = m - 1;
else
s = m + 1;
}
if(data[s] == key)
return s;
else
return -1;
}
int tail(int *data, int n, int key)
{
int s, e, m;
s = 0;
e = n - 1;
while(s <= e) {
m = (s + e) >> 1;
if(data[m] <= key)
s = m + 1;
else
e = m - 1;
}
if(data[e] == key)
return e;
else
return -1;
}
int main()
{
int test[] = {0, 1, 2, 3, 3, 3, 3, 4, 5, 6, 7, 8};
printf("head index :%d; tail index: %d\n",
head(test, 12, 3), tail(test, 12, 3));
return 0;
}
你也可以整合成一个函数
注:这里没有对参数做安全检测