假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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 輸...