[LeetCode] 0033. 回転ソート配列での検索

回転ソート配列での検索

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、ターゲット)
				
			
ja日本語