ノートタイトルleetcodeブラシ(のpython3) - 。154、検索最小回転したソートアレイIIで

154回転したソート配列IIで最小を探します

配列は、事前にあなたにいくつかのピボット不明で回転させ、昇順にソートしたとします。

(すなわち、[0,1,2,4,5,6,7]は[4,5,6,7,0,1,2]になるかもしれません)。

最小の要素を検索します。

アレイは重複を含んでいてもよいです。

例1:

入力:[1,3,5]
出力:1
例2:

入力:[2,2,2,0,1]
出力:0
注:

これが回転ソート配列の最小を見つけるために、フォローアップの問題です。
重複が実行時の複雑さに影響を与えることができますか?方法と理由?

問題解決

func findMin(nums []int) int {
	lg := len(nums)
	l := 0
	r := lg - 1
	if l+1 > r {
		return min(nums[l], nums[r])
	}
	for l < r {
		mid := (l + r) / 2
		if nums[r] > nums[mid] {
			r = mid
        } else if nums[r]==nums[mid]{
            if findLeftbound(nums,mid) {
                r = mid
            } else {
                l = mid+1
            }
        } else {
			l = mid + 1
		}
	}
	return nums[l]
}

func min(i int, j int) int {
	if i < j {
		return i
	} else {
		return j
	}
}

func findLeftbound(nums []int, mid int) bool {
	for i:=mid;i>=0;i--{
		if nums[i]< nums[mid] {
			return true
		}
	}
	return false
}
公開された98元の記事 ウォンの賞賛0 ビュー1444

おすすめ

転載: blog.csdn.net/weixin_44555304/article/details/104434106