如何从给定的数字数组中找到给定数字的前任?例如,如果给定数组包含
-2,1,0,3
且输入数字为0
,则前驱为-2
。
我写了以下代码:
public static int getPredecessor(int[] inpArr, int key) {
int minDiff = key<=0 ? (key-inpArr[0]) : key;
int predecessor = key;
for(int i=0;i<inpArr.length;i++) {
if(inpArr[i] < key && (key - inpArr[i])<=minDiff)
{
minDiff = key - inpArr[i];
predecessor = inpArr[i];
}
}
return predecessor;
}
我所做的基本上是跟踪提供的数字与数组中每个数字之间的最小差异;每当遇到最小差异时,数组中的那个特定数字就被存储为前任。如果最终的 return 语句将返回与输入数字相同的数字,那么这意味着在给定的数组中没有找到前任。
我的问题是:
可以以任何方式优化代码吗?它以 O(n) 时间和 O(1) 空间复杂度运行。