【发布时间】:2018-01-10 21:22:06
【问题描述】:
我想知道是否有可能在非空排序数组中找到最接近的低元素,该元素可能存在或不存在。元素也可以重复任意次数。数组 +ve 的所有元素。
例如,如果我们有值 [2,5,6,7,7,8,9] 并且我们正在寻找最接近 6 的元素,它应该返回 5,因为 5 是数组,小于 6。 同样,如果我们要寻找最接近 9 的元素,它应该返回 8,因为 8 是数组中的最大数,小于 9。 如果没有找到最接近的较低元素,则返回 -1 就像我们正在寻找最接近 1 的元素一样,它应该返回 -1,因为没有这样的元素可以低于 1。这里 -1 表示在最靠近元素的数组中不存在这样的值
我已经尝试过下面的代码。没关系?如果我遗漏了什么,请帮助我。 Java 代码会更有帮助。
static int find(int[] a, int target)
{
int n = a.length;
if(target <= a[0])
return -1;
if(target > a[n-1])
return a[n-1];
int i=0,j=n,mid=0;
while(i<j)
{
mid = (i+j)/2;
if(target <= a[mid])
{
if( mid >0 & target> a[mid-1] )
{
return a[mid-1];
}
j= mid;
}
else
{
if( mid<(n-1) & target > a[mid+1] )
{
return a[mid+1];
}
i= mid+1;
}
}
return mid;
}
【问题讨论】:
-
空数组应该怎么办?那么数组中的负数呢--1 应该是什么意思呢?您的代码很难阅读,这就是我避免深入挖掘的原因。我建议至少投资于干净的语法。
-
不,先生。全部 +ve no 并且应该至少有一个元素。这里 -1 表示最靠近元素的数组中不存在这样的值
-
@C-Otto 先生,我已经更新了您所需的信息。而且我也试图给出一个干净的语法。你现在能帮帮我吗?