毎週1つのアルゴリズム問題(28)
1290 ワード
今週のテーマ難易度レベル「Easy」は、しばらくPythonを勉強していたので、以降「Easy」レベルのテーマはすべてPythonで書きます
テーマ:今週のテーマは先週のアルゴリズムの問題とよく似ていて、昇順の集合と数字targetをあげて、それから今度はtargetの位置(つまり昇順の集合に重複する数字がない)を見つけて、集合の中にtargetがなければ、targetを挿入する位置(昇順に並べた位置)に戻ります.
考え方:この考え方は前回とあまり差がなく、簡単です.今回は二分法を使いました.
効率が高いにもかかわらず、時間がかかり、Pythonが開発したアプリケーションが普及するまでしばらく待たなければならない.言語ごとに独自のアプリケーションシーンがあるはずだが、Pythonでアルゴリズムを書く人は明らかにCを使う人より多い.
本文はCrazy Stevenのオリジナルの出品で、転載を歓迎して、転載する時出典を明記してください!
テーマ:今週のテーマは先週のアルゴリズムの問題とよく似ていて、昇順の集合と数字targetをあげて、それから今度はtargetの位置(つまり昇順の集合に重複する数字がない)を見つけて、集合の中にtargetがなければ、targetを挿入する位置(昇順に並べた位置)に戻ります.
考え方:この考え方は前回とあまり差がなく、簡単です.今回は二分法を使いました.
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left = 0;
right = len(nums)-1;
// ( )
if target <= nums[left]: return left;
// ( )
if target > nums[right]: return right+1;
//
while (left <= right):
mid = (left + right) >> 1;
if nums[mid] < target:left = mid + 1;
//( )
if target <= nums[left]: return left;
elif nums[mid] > target:right = mid -1;
//( )
if target > nums[right]: return right+1;
else:
return mid;
return left;
効率が高いにもかかわらず、時間がかかり、Pythonが開発したアプリケーションが普及するまでしばらく待たなければならない.言語ごとに独自のアプリケーションシーンがあるはずだが、Pythonでアルゴリズムを書く人は明らかにCを使う人より多い.
本文はCrazy Stevenのオリジナルの出品で、転載を歓迎して、転載する時出典を明記してください!