如何從給定的數字數組中找到給定數字的前輩?例如,如果給定數組包含 -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;
}
我所做基本上保持跟蹤所提供的數字和所述陣列中的每個數之間的最小差值的;每遇到最小差異,數組中的該特定數字就被存儲爲前一個數字。如果最終返回語句將返回與輸入數字相同的數字,那麼這意味着在給定數組中沒有找到前驅數據。
我的問題是:
可以以任何方式對代碼進行優化嗎?它運行在O(n)時間和O(1)空間的複雜度上。
如果數組排序,則可以比O(n)做得更好。 – jtahlborn 2013-02-15 02:23:16
@Dave nope,他在談論價值。排序前的第一個值是哪個值。 – 2013-02-15 02:25:02
啊,我明白了...... – 2013-02-15 02:25:41