演算法之旋轉陣列的查詢問題整理(附二分查詢模板)

2021-10-22 17:14:05 字數 1612 閱讀 6668

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

尋找旋轉陣列中的最小值,陣列中每個元素的唯一的。

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

尋找旋轉陣列中的最小值,陣列中包含重複元素。

33. 搜尋旋轉排序陣列

在尋找陣列中查詢是否存在某個值,不包含重複元素。

81. 搜尋旋轉排序陣列 ii

在尋找陣列中查詢是否存在某個值,包含重複元素。

以上題目均來自 leetcode

public

binarysearch

(int

nums,

int target)

else

if(nums[mid]

< target)

else

}}

public

binarysearch

(int

nums,

int target)

else

}}

public

binarysearch

(int

nums,

int target)

else

}}

對於排序陣列的查詢,很容易想到二分法。

對於旋轉陣列,依然可以使用二分法進行查詢。

問題1不包含重複值的最小值的查詢

使用模板二

class

solution

else

}return nums[i];}

}

問題2

包含重複值的最小值的查詢

在模板二基礎上,針對題目變化

class

solution

else

if(nums[mid]

< nums[right]

)else

}return nums[left];}

}

問題3

不包含重複值的某個元素的查詢

使用模板一

class

solution

else

if(nums[mid]

> target)

else

}else

else}}

return-1

;}}

問題4

包含重複元素的值查詢

使用模板一

class

solution

// 因為下面用到了n-1,所以不能用right;如果此處用right,下面判斷就要用nums[0]

if(nums[left]

== nums[mid])if

(nums[mid]

> target)

else

}else

else}}

return

false;}

}

雖然使用了二分查詢,但是由於存在重複元素,當陣列中所有元素相等且不等於target時,需要遍歷陣列中所有元素。因此時間複雜度為o(n)。

旋轉陣列的查詢問題

題目 乙個陣列是由乙個遞增數列右移若干位形成的,比如是由左移兩位形成的,在這種陣列中查詢某乙個數。解題思路如下 首先獲取元素 點,時間複雜度為o log n 因為旋轉陣列是由遞增陣列右移得到,因此旋轉陣列中的第乙個元素是整個陣列的中間元素,比較待查詢元素與第乙個元素,如果待查詢元素大於等於第乙個元素...

leetcode 之 旋轉陣列問題

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。in...

演算法題 查詢旋轉陣列的值

在乙個排序的陣列中,如,經過旋轉後得到,當然也可以得到原陣列,在該旋轉後的陣列中查詢某個元素。陷阱在於陣列不是嚴格遞增的 比如這樣有很多重複的元素的陣列時,當要查詢0時,在mid位置的元素為1,不能判斷怎麼縮小範圍 include include include include include in...