Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク
整数配列があります 数字
昇順でソート( 明確な 値)。
関数に渡される前に、 数字
は おそらく回転している 不明なピボットインデックスで k
(1 <= k < nums.length
) 結果の配列は次のようになります [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(0 から始まるインデックス)。 例えば、 [0,1,2,4,5,6,7]
ピボットインデックスで回転される可能性があります 3
そしてなる [4,5,6,7,0,1,2]
.
配列を考えると 数字
後 可能な回転と整数 ターゲット
、 戻る のインデックス ターゲット
それが入っている場合 数字
、 または -1
入っていない場合 数字
.
アルゴリズムを記述する必要があります O(log n)
実行時の複雑さ。
例 1:
入力: 数値 = [4,5,6,7,0,1,2]、ターゲット = 0 出力: 4
例 2:
入力: 数値 = [4,5,6,7,0,1,2]、ターゲット = 3 出力: -1
例 3:
入力: 数値 = [1]、ターゲット = 0 出力: -1
制約:
1 <= nums.length <= 5000
-10 4 <= nums[i] <= 10 4
- のすべての値
数字
は 個性的. 数字
回転される可能性がある昇順の配列です。-10 4 <= ターゲット <= 10 4
パイソン
import List class の入力から 解決策: def search(self, nums: List[int], target: int) -> int: # return nums.index(target) if target in nums else -1 n = len(nums) left, right = 0, n-1 while left <= right:mid = left + (right - left) // 2 if nums[mid] > nums[-1]: left = mid + 1 else: right = mid - 1 def binarySearch(left_boundary: int, right_boundary: int, target: int): left, right = left_boundary, right_boundary while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return Mid elif nums[mid] > target: right = mid - 1 else: left = middle + 1 return -1 if (answer := binarySearch(0, left-1, target)) != -1: return Answer return binarySearch(左、n-1、ターゲット)