毎週1つのアルゴリズム問題(28)

1290 ワード

今週のテーマ難易度レベル「Easy」は、しばらくPythonを勉強していたので、以降「Easy」レベルのテーマはすべてPythonで書きます
テーマ:今週のテーマは先週のアルゴリズムの問題とよく似ていて、昇順の集合と数字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のオリジナルの出品で、転載を歓迎して、転載する時出典を明記してください!