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()