IOSアルゴリズム(基礎編)---回転配列の最小数字
1848 ワード
回転配列(順配列配列開始要素を末尾に移動して形成された配列)の最小値を見つけます.
例:
入力:[4,5,6,1,2,3]出力:1入力:[2,3,3,3,3,0,1]出力:0
この問題はよくアルゴリズムを書く人にとって、とても簡単で、基礎の中の基礎ここで私たちは多種の方法を使って、異なる構想でこの問題を処理します
一:ソート法
構想:配列は順方向に並べ替えて、この時の頭の値は最小で、頭の値を取って出力して、1行のコード、簡潔です
コード#コード#
sorted()の時間的複雑さは、Complexity:O(n log n)、where n is the length of the collectionであるため、データが大きい場合に比較的時間がかかる
二:暴力法
構想:forサイクル最小、時間複雑度最小
コード#コード#
一度のforの時間の複雑さは:O(n)で、時間のかかることを減らします
方法3:二分法
二分法はこの問題を最善に処理する方法だと思います.
1.最大下付きmax:numbers.count-1,最小下付きmin:0 2.max>minを条件とするwhileサイクル3.中間値midは常に下付き(max+min)/2 4とする.numbers[mid]>numbers[max]説明の最小値がnumbers[mid]の右側にある場合はmin=mid+1を二分し続け、numbers[mid]コード#コード#
题目来源:力扣(LeetCode)ありがとうございます
IOSアルゴリズム統合アドレス
例:
入力:[4,5,6,1,2,3]出力:1入力:[2,3,3,3,3,0,1]出力:0
この問題はよくアルゴリズムを書く人にとって、とても簡単で、基礎の中の基礎ここで私たちは多種の方法を使って、異なる構想でこの問題を処理します
一:ソート法
構想:配列は順方向に並べ替えて、この時の頭の値は最小で、頭の値を取って出力して、1行のコード、簡潔です
コード#コード#
class Solution {
func minArray(_ numbers: [Int]) -> Int {
return numbers.sorted().first!
}
}
sorted()の時間的複雑さは、Complexity:O(n log n)、where n is the length of the collectionであるため、データが大きい場合に比較的時間がかかる
二:暴力法
構想:forサイクル最小、時間複雑度最小
コード#コード#
class Solution {
func minArray(_ numbers: [Int]) -> Int {
var min = numbers.first!
for i in 0.. numbers[i] ? numbers[i] : min
}
return min
}
}
一度のforの時間の複雑さは:O(n)で、時間のかかることを減らします
方法3:二分法
二分法はこの問題を最善に処理する方法だと思います.
1.最大下付きmax:numbers.count-1,最小下付きmin:0 2.max>minを条件とするwhileサイクル3.中間値midは常に下付き(max+min)/2 4とする.numbers[mid]>numbers[max]説明の最小値がnumbers[mid]の右側にある場合はmin=mid+1を二分し続け、numbers[mid]
class Solution {
func minArray(_ numbers: [Int]) -> Int {
var min = 0
var max = numbers.count - 1
while min < max {
let mid = (max + min) / 2
if numbers[mid] > numbers[max] {
min = mid + 1;
}else if numbers[mid] < numbers[max] {
max = mid;
} else {
max -= 1
}
}
return numbers[min]
}
}
题目来源:力扣(LeetCode)ありがとうございます
IOSアルゴリズム統合アドレス