劍指offer 旋轉陣列的最小數字(11題)

2021-08-27 03:04:06 字數 1493 閱讀 6047

1、第一題引至劍指offer

題目:把乙個陣列最開始的若干元素搬到陣列的末尾,稱其為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列{3,4,5,1,2}為{1,2,3,4,5}的乙個旋轉,該陣列的最小值為1.

解此題分兩種情況

第一種情況:前後指標與中間指標所指向的元素不同時,

如果中間元素比前端元素大,最小值位於中間元素的右邊;

如果中間元素比後端元素小,最小值位於中間元素的左邊。

第二種情況:如果前後指標與中間指標所指向的元素不同時,只能採用順序遍歷,查打出最小值。

解題**如下所示:

#include#includeusing namespace std;

int commonsearch(vector& nums)

return minval;

}int minfromrotatearray(vector& nums)

mid = (first + end) / 2;

if (nums[first] == nums[end] &&//如果中間指標所指元素與兩端元素相等,則只能順序查詢了

nums[first] == nums[mid])

return commonsearch(nums);

if (nums[mid] >= nums[first])//表明最小值位於中間元素的右邊

first = mid;

else if (nums[mid] <= nums[end])//表明最小值位於中間元素的左邊

end = mid;

} return nums[end];

}

2、第二題引至leetcode

在旋轉陣列中尋找所給定的值。

解題思路:

//[12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

//if target is let's say 14, then we adjust nums to this, where "inf" means infinity:

//[12, 13, 14, 15, 16, 17, 18, 19, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf]

//if target is let's say 7, then we adjust nums to this:

//[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

需要注意的是在c中int的最大值為0x7ffffff,最小值為(int)0x80000000。

**如下:

int search(vector& nums, int target) 

return -1;

}

劍指offer 旋轉陣列的最小數

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。public class test system.out.pr...

劍指offer 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。分析 這道題最直觀的解法並不難。從頭到尾遍歷陣列一次,就能找出最小的元素,時間複雜度顯然是o n 但這個思路沒有利用輸入陣列的特性...

劍指offer 旋轉陣列的最小數字

記錄來自 劍指offer 上的演算法題。題目描述如下 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個選擇,輸出旋轉陣列的最小元素。例如陣列是的乙個旋轉,該陣列的最小值是1。這裡可以採用二分查詢的想法,使用兩個指標,乙個指向第乙個元素,乙個指向末尾元素,...