題目
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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
這是 搜尋旋轉排序陣列 的延伸題目,本題中的 nums 可能包含重複元素。
解題思路
本題是leetcode 33. 搜尋旋轉排序陣列 的高階,本題主要側重點在於處理陣列中的重複元素。
1. 首先我們來考慮一下重複元素會造成什麼樣的影響,
如果 nums[0] == nums[-1] == target:
直接找到了 target,返回 true 即可
如果 nums[0] == nums[-1] != target:
2. 我們可以採用二分法
演算法流程:
複雜度分析
時間複雜度:o(logn)
空間複雜度:o(1)
**如下:
class
solution
(object):
defsearch
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: bool
"""left =
0 right=
len(nums)-1
while
(left<=right)
: mid=left +
(right - left)//2
if(nums[mid]
==target)
:return
true
if(nums[mid]
==nums[left]
==nums[right]):
left = left +
1 right = right -
1elif
(nums[left]
<=nums[mid]):
if(nums[left]
<=target and targetright = mid -
1else
: left = mid +
1else:if
(nums[mid]
left = mid +
1else
: right = mid -
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 輸...