原題如下:
搜尋旋轉排序陣列
假設有乙個排序的
按未知的旋轉軸旋轉的
陣列(比如,
0 1 2 4 5 6 7
可能成為
4 5 6 7 0 1 2
)。給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回-1。
你可以假設陣列中不存在重複的元素。
您在真實的面試中是否遇到過這個題?
yes
樣例給出[4, 5, 1, 2, 3]
和target=1,返回 2
給出[4, 5, 1, 2, 3]
和target=0,返回 -1
做題思路:
1、用二分法來做,每次寫二分法的時候我總是思路不夠清晰,然後判斷條件裡面是否加等號也不是很清楚,需要多加練習;
2、分幾種情況:
如果mid正好是需要尋找的target的下標,直接返回;
如果mid(簡寫,即mid對應位置的數值)小於左邊的l,那麼證明mid和l不在乙個遞增陣列上,分割開了。此時mid肯定是和r即最右邊的數在乙個遞增陣列上,則判斷如果target大於mid並且小於等於(注意有等於)r,那麼l=mid+1,否則在前面,r=mid-1;
如果mid大於等於左邊的l,證明mid和l在乙個遞增陣列上,那麼判斷,如果mid大於target且target大於等於l,則r=mid-1,否則l=mid+1。
具體的c++**如下:
class solution
if(a[mid]>a[l])
else
}else
else}}
return -1;}};
LintCode刷題 旋轉字串
描述 給定乙個字串 以字元陣列的形式給出 和乙個偏移量,根據偏移量原地旋轉字串 從左向右旋轉 樣例 輸入 str abcdefg offset 3 輸出 str efgabcd 樣例解釋 注意是原地旋轉,即str旋轉後為 efgabcd 解題 難點分析 字串為 的情況 偏移量 offset 0 偏移...
LintCode刷題之路(八) 旋轉字串
給定乙個字串和乙個偏移量,根據偏移量旋轉字串 從左向右旋轉 樣例 對於字串 abcdefg offset 0 abcdefg offset 1 gabcdef offset 2 fgabcde offset 3 efgabcd 挑戰 在陣列上原地旋轉,使用o 1 的額外空間 思路 新建立乙個字串陣列...
LintCode刷題隨筆
給出乙個陣列nums包含n 1個整數,每個整數是從1到n 包括邊界 保證至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。1.不能修改陣列 假設陣列只能讀 2.只能用額外的o 1 的空間 3.時間複雜度小於o n 2 4.陣列中只有乙個重複的數,但可能重複超過一次 您在真實的面試中是...