給出乙個轉動過的有序陣列,你事先不知道該陣列轉動了多少
(例如,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 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...