[LeetCode] 0153. 回転ソート配列の最小値を見つける

回転ソートされた配列の最小値を見つける

Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク

中くらい


長さの配列を想定します n 昇順に並べ替えると、 回転した 間 1 そして n たとえば、配列です。 数値 = [0,1,2,4,5,6,7] 次のようになる可能性があります:

  • [4,5,6,7,0,1,2] 回転していたら 4 回。
  • [0,1,2,4,5,6,7] 回転していたら 7 回。

注目してください 回転する 配列 [a[0]、a[1]、a[2]、...、a[n-1]] 配列内の 1 回の結果 [a[n-1]、a[0]、a[1]、a[2]、...、a[n-2]].

ソートされた回転配列を考えると 数字 の 個性的 要素、戻り値 この配列の最小要素.

で実行されるアルゴリズムを作成する必要があります。 O(log n) 時間。

 

例 1:

入力: 数値 = [3,4,5,1,2]
出力: 1
説明: 元の配列は [1,2,3,4,5] で 3 回回転されました。

例 2:

入力: 数値 = [4,5,6,7,0,1,2]
出力: 0
説明: 元の配列は [0,1,2,4,5,6,7] で、4 回回転されました。

例 3:

入力: 数値 = [11,13,15,17]
出力: 11
説明: 元の配列は [11,13,15,17] で、4 回回転されました。 

 

制約:

  • n == nums.length
  • 1 <= n <= 5000
  • -5000 <= nums[i] <= 5000
  • のすべての整数 数字 は 個性的.
  • 数字 の間でソートおよびローテーションされます 1 そして n 回。

パイソン

				
					# 時間計算量: O(logn) # 空間計算量: インポート リスト クラスの入力による O(1) 解決策: def findMin(self, nums: List[int]) -> int: if len(nums) == 1: return nums [0] left, right = 0, len(nums) - 1 if nums[right] > nums[0]: nums[0] を返します while left <= right: middle = left + (right - left) // 2 if nums[mid] > nums[mid + 1]: nums[mid] < nums[mid - 1]の場合、nums[mid+1]を返します。 nums[mid] > nums[-1]の場合、nums[mid]を返します: left = Mid + 1 それ以外の場合: right = Mid - 1 return nums[mid] nums = [11, 13, 15, 17] print(Solution().findMin(nums))
				
			
ja日本語