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))