常考資料結構與演算法 在轉動過的有序陣列中尋找目標值

2021-10-20 04:43:53 字數 1100 閱讀 3690

給出乙個轉動過的有序陣列,你事先不知道該陣列轉動了多少

(例如,0 1 2 4 5 6 7可能變為4 5 6 7 0 1 2).

在陣列中搜尋給出的目標值,如果能在陣列中找到,返回它的索引,否則返回-1。

假設陣列中不存在重複項。

思路:首先判斷排序陣列是否翻轉,如果沒有翻轉,直接使用二分查詢,如果翻轉,先使用變種的二分查詢找到翻轉位置,再分別在前半段與後半段進行二分查詢尋找目標值。

public class halfsearch ;

int a = ;

//int a =;

halfsearch halfsearch = new halfsearch();

int index = halfsearch.search(a, 67);

system.out.println(index);

}/**

** @param a int整型一維陣列

* @param target int整型

* @return int整型

*/public int search (int a, int target)

// ; 9,11 1 3 5 7

// 如果翻轉,先使用變種的二分查詢找到翻轉位置,再分別在前半段與後半段進行二分查詢尋找目標值。

// 找到旋轉點

int start = 0;

int end = a.length-1;

// while(start <= end)else if(a[middle] < a[end])else

// }

while(start < end)else

}int ret = binarysearch(a, 0, start-1, target);

if(-1 == ret)

return ret;

}// 二分法

public int binarysearch(int a, int begin, int end, int target)else if(a[middle] > target)else

}return -1;

}}

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...