leetcode 81 搜尋旋轉排序陣列 II

2021-10-05 14:37:04 字數 1554 閱讀 7031

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] )。

編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。

示例 1:

輸入: nums = [2,5,6,0,0,1,2], target = 0

輸出: true

示例 2:

輸入: nums = [2,5,6,0,0,1,2], target = 3

輸出: false

原先的思路還是先找到旋轉點,再對有序的部分二分查詢。但是找旋轉點的時間複雜度就有o(n

)o(n)

o(n)

了。看題解+根據無重複數字的尋找做一定改變。首先同樣先判斷哪段有序,因為有重複數字,所以需要額外處理特殊情況:nums[left] == nums[middle],如果是left指向的數字和middle指向的數字相同,則left向右邊進一位即可。right處理同樣

時間》93.33%

空間》20.00%

class

solution

:def

search

(self, nums: list[

int]

, target:

int)

->

bool

: left, right =0,

len(nums)-1

while left <= right:

middle =

(left + right)//2

if nums[middle]

== target:

return

true

if nums[middle]

> nums[left]

:if nums[left]

<= target < nums[middle]

: right = middle -

1else

: left = middle +

1elif nums[middle]

< nums[right]

:if nums[middle]

< target <= nums[right]

: left = middle +

1else

: right = middle -

1else

:if nums[left]

== nums[middle]

: left +=

1elif nums[right]

== nums[middle]

: right -=

1return

false

LeetCode81 搜尋旋轉排序陣列 II

二分查詢,但是下面的 在測試用例 3,1 1中出錯。package 牛客刷題.leetcode.查詢.search in rotated sorted array ii created by administrator on 2018 6 28 0028.public class solution ...

LeetCode 81 搜尋旋轉排序陣列 II

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回true,否則返回false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0輸出 t...

leetcode81 搜尋旋轉排序陣列 II

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0 輸...