將兩個排序的連續數組數組合併到一個數組中。 這兩個陣列都有不同的數字。查找已排序的循環整數數組的起點索引
ex :
{1, 2, 3, 4, 5, 6, 7, 8, 9} and
{10, 11, 12, 13, 14}
int[] resultArr = {10, 11, 12, 13, 14, 1, 2, 3, 4, 5, 6, 7, 8, 9};
^
查找起點索引的算法。如果我們把它當作循環數組,它將在從起始點迭代的同時按排序順序排列。
在上面的例子中的起始索引會「4」
我已經寫了下面的示例程序來解決這個問題,但對時間複雜度不開心。
有人可以告訴我下面的代碼的時間複雜性,並提供一個更好的解決方案,這個問題。
public class FindStartingPoint {
public static Integer no = null;
private static void findStartingPoint(int[] arr, int low, int mid, int high) {
if (no != null)
return;
else if (high - low <= 1)
return;
else if (arr[mid] > arr[mid + 1]) {
no = mid + 1;
return;
}
findStartingPoint(arr, low, (low + mid)/2, mid);
findStartingPoint(arr, mid, (mid + high)/2, high);
}
public static void main(String[] args) {
int[] arr = {12, 13, 14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
findStartingPoint(arr, 0, arr.length/2, arr.length - 1);
System.out.println(no);
}
}
在此先感謝。 :-)
等等,你是否試圖找到數組中的最低數字? – basic
@JordanSeanor,不,我試圖找出最低數組的索引(這將是起點) –
如果兩個數組是'{1,2,3}'和'{4,5, 6}',沒有解決方案,因此僅僅進行排序並且具有不同的元素是不夠的。 – biziclop