這是一個訪問問題:給定integer x
和sorted array a[] of N distinct integers
,設計linear-time algorithm
以確定是否存在兩個不同的索引i和j, a[i] + a[j] == x
。不允許輔助存儲。 我已在Java
中執行此操作。但我目前的運行時間爲O(nlogn)
,因爲我在each iteration
上做了binarySearch
。所以它不是嚴格的linear
。我想知道這個問題是否存在linear time solution
。如果是這樣,一些指示可能會有所幫助。找到排序數組的索引,使得a [i] + a [j] = x
謝謝。
public class SumArrayIndex {
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9,10};
sumSortedArray(arr, 4);
System.out.println();
sumSortedArray(arr, 19);
System.out.println();
sumSortedArray(arr, 100);
}
public static void sumSortedArray(int[] arr, int sum){
for (int i=0;i<arr.length;i++){
int temp=Arrays.binarySearch(arr, sum-arr[i]);
if (temp>0 && temp!=i){
System.out.printf("The two indices are %s and %s%n ",i,temp);
return;
}
}
System.out.printf("The sum:%s cannot be formed with given array:%s",sum,Arrays.toString(arr));
}
}
啓動兩個指針,一個位於數組的任一端。檢查他們的總和。如果太小,請將較小的指針向上移動一個空格。如果太大,請將較大的指針向下移動到數組中的一個空格處。如果指針相遇並且你沒有找到可行的東西,那什麼都行不通。 – leif
都是正數嗎? – Claudiu
@Claudiu:是的,他們是積極的 – eagertoLearn