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 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例:
解答:
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 = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [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 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。
人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)。
这些情侣的初始座位 row[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
示例:
解答:
扫描二维码关注公众号,回复:
12498548 查看本文章
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()