0215leetcodeは5つのPythonの質問をブラシします

171

タイトルの説明:
Excelテーブルの列名を指定して、対応する列番号を返します。
たとえば、
A-> 1
B-> 2
C-> 3

Z-> 26
AA-> 27
AB-> 28

例:
ここに画像の説明を挿入
回答:

class Solution:
    def titleToNumber(self, s: str) -> int:
        #26进制转10进制
        ans = 0
        for x in s:
            ans *= 26
            ans += ord(x)-ord('A')+1
        return ans

239

タイトルの説明:
整数の配列numsを指定すると、サイズkのスライディングウィンドウが配列の左端から右端に移動します。スライディングウィンドウにはk個の数字しか表示されません。スライディングウィンドウは、一度に1つの位置だけ右に移動します。
スライディングウィンドウの最大値を返します。

例:
ここに画像の説明を挿入

回答:

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        win, ret = [], []
        for i, v in enumerate(nums):
            if i >= k and win[0] <= i - k: 
                win.pop(0)
            while win and nums[win[-1]] <= v: 
                win.pop()
            win.append(i)
            if i >= k - 1: 
                ret.append(nums[win[0]])
        return ret

448

タイトルの説明:
範囲が1≤a[i]≤n(n =配列サイズ)の整数配列の場合、配列内の一部の要素は2回表示され、一部は1回だけ表示されます。
配列に表示されない範囲[1、n]のすべての数値を見つけます。
余分なスペースを使用せずにこのタスクを実行でき、時間計算量はO(n)ですか?返された配列は余分なスペースに含まれていないと想定できます。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
        '''
        将所有正数作为数组下标,置对应数组值为负值。
        那么,仍为正数的位置即为(未出现过)消失的数字。
        '''
        for num in nums:
            nums[abs(num)-1] = -abs(nums[abs(num)-1])
        print(nums)
        return [i+1 for i,num in enumerate(nums) if num>0]

765

タイトルの説明:
N組のカップルが2Nの連続した座席に座って、お互いの手を握りたいと思っています。各カップルが並んで座れるように、座席の交換の最小数を計算します。1回の交換で任意の2人を選択でき、立ち上がって座席を交換できます。
人と席は0から2N-1までの整数で表されます。恋人には順番に番号が付けられ、最初のペアは(0、1)、2番目のペアは(2、3)というように、最後のペアは( 2N-2、2N-1)。
これらのカップルの最初の座席列[i]は、最初にi番目の座席に座った人によって決定されます。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def minSwapsCouples(self, row: List[int]) -> int:
        """
        每两个座位成一对,假定左边的人都是合法的不变,如果TA右边的人与TA匹配则
        跳过,不匹配则找到TA的匹配对象的与TA右边的人交换。
        """
        def find_another(n):
            if n % 2 == 0:
                return n + 1
            else:
                return n - 1

        c = 0
        for i in range(0, len(row), 2):
            p1 = row[i]
            p2 = find_another(p1)
            if row[i+1] != p2:
                j = row.index(p2)
                row[i+1], row[j] = row[j], row[i+1]
                c += 1

        return c

剣はoffer59-IIを指します

タイトルの説明:
キューを定義し、関数max_valueを実装して、キュー内の最大値を取得してください。関数max_value、push_back、およびpop_frontの償却時間計算量はすべてO(1)です。
キューが空の場合、pop_frontとmax_valueは-1を返す必要があります

例:
ここに画像の説明を挿入
回答:

class MaxQueue:

    def __init__(self):
        self.queue = []
        self.maxq = []


    def max_value(self) -> int:
        if not self.maxq:
            return -1
        return self.maxq[0]


    def push_back(self, value: int) -> None:
        self.queue.append(value)

        while self.maxq and self.maxq[-1] < value:
            self.maxq.pop()
        self.maxq.append(value)


    def pop_front(self) -> int:
        if not self.queue:
            return -1
        v = self.queue.pop(0)
        if v == self.maxq[0]:
            self.maxq.pop(0)
        return v



# Your MaxQueue object will be instantiated and called as such:
# obj = MaxQueue()
# param_1 = obj.max_value()
# obj.push_back(value)
# param_3 = obj.pop_front()

おすすめ

転載: blog.csdn.net/yeqing1997/article/details/113803572