題目描述:
給定乙個遞增陣列旋轉後的陣列,找出旋轉陣列中的最小值
示例:
旋轉陣列為,則輸出為1
分析:
陣列可能存在以下三種情況
利用二分法的思想,記錄待查詢的邊界下標分別為left和right,此例中為0和6
1)如果nums[lef] < nums[right],則序列是遞增的,最小值即為左邊界nums[left],直接返回。(case1)
2)二分法求中間元素的下標mid=6,如果nums[mid]>nums[left]且nums[mid]>nums[right],則nums[left…mid]為遞增序列,最小值一定在nums[mid+1…right]之間,因此令left=mid+1繼續重複查詢。 (case2)
3)如果nums[mid] < nums[left]且nums[mid] < nums[right],則最小值一定在nums[left…mid]之間。令right=mid (case3)
4)如果都不滿足,即三個臨界點可能存在相等的情況,則++left,使左邊界向右移動一位繼續查詢
**:
int findmin(vector
& nums) else
if(nums[m]else
}return nums[l];
}
**:
bool search(vector
& nums, int target)
int l=0,r=nums.size()-1;
while(l<=r)else
if(nums[l]>nums[mid])else
}return
false;
}
《劍指offer》系列 1
最近一直在看劍指offer,這上面的題目都是比較考察程式設計能力的,打算做個記錄,把寫過的 儲存下來 1.實現乙個string類 面試官的考察點應該在以下幾點 1.模板類的書寫 2.對於賦值函式考察的幾點 1 是否返回引用,因為只有返回引用,才能連續的進行賦值 2 引數是否是常量 3 是否是自身賦值...
《劍指offer》系列 2
1.求斐波那契數列的第n項 這個題目很簡單,講遞迴的書上都是用這個來講的,但是面試的時候,如果你寫個遞迴,那估計會讓人失望的,因為遞迴的效率真是乙個問題,你可以測試一下,輸入50,基本上得到結果的時間,夠你去喝杯茶了 include using namespace std 使用遞迴效率太低了,甚至可...
劍指Offer 6 旋轉陣列的最小元素
description把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以直接binary search,每次mid和r的...