尋找旋轉排序陣列中的最小值

2021-08-01 01:35:16 字數 787 閱讀 2837

今天做了一道演算法題,尋找旋轉排序陣列中的最小值,就是將原來公升序的陣列,以某個點截斷,然後交換這兩段,構成新的陣列,使用二分法在這個新陣列中找最小值,這道題開始想的複雜了,認為這個輸入陣列有4中形況:1、公升序排列,2、降序排列,3、先公升再降,4、先降再公升,然後洋洋灑灑的寫了下面的**:

int findmin(vector&nums)

else if (nums[low] < nums[mid] && nums[mid] > nums[high])

else if (nums[low] > nums[mid] && nums[mid] < nums[high])

else

}return nums[low];}

後來看了網上的乙個部落格,發現思路想複雜了(看來看問題,不同角度很關鍵,這也決定了你以後做事情,如果一開始就把看事情的角度想歪了,那真的是會浪費大量的時間和精力,但是如果一旦你有這樣的思維習慣,那麼沒關係,多總結,分析,把這種冗長的思維習慣改過來,慢慢的練習)

現在想想,可以這麼看問題,有序的陣列是【1,2,...i, i+1, ...,n】,轉換之後,無非是找了乙個點,然後旋轉兩段子陣列,得到

【i+1, ...,n,1,....i】,其實反覆想這個問題,是十分簡單的,非常非常簡單,但是就是一瞬間,你能否找對角度來看這個問題。

**如下:

int findmin(vector&nums)

return nums[low];}

而且還要記住,在採用二分查詢的演算法中,low和high在每一次迴圈中,都要變化,否則**就進入死迴圈,程度便無法退出。

尋找旋轉排序陣列中的最小值

假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。你可以假設陣列中不存在重複的元素。public class solution else if num mid 如果陣列中可能存在重複的元素。那麼上面的方法就不能使...

尋找旋轉排序陣列中的最小值

假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。你可以假設陣列中不存在重複的元素。解題思路 陣列中不存在重複的元素 二分法的思想,首先判斷最左邊和最右邊的關係,如果小於就直接返回 如果中間的值大於等於最左邊的值...

尋找旋轉排序陣列中的最小值

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 請找出其中最小的元素。注意陣列中可能存在重複的元素。示例 1 輸入 1,3,5 輸出 1class solution public int findmin1 int ...