1670. 设计前中后队列
1670. 设计前中后队列
from collections import deque
class FrontMiddleBackQueue:
def __init__(self):
self.front_queue = deque()
self.back_queue = deque()
self.length = 0
def adjust(self):
should_len_front = self.length // 2
while should_len_front > len(self.front_queue):
tmp_val = self.back_queue.popleft()
self.front_queue.append(tmp_val)
while should_len_front < len(self.front_queue):
tmp_val = self.front_queue.pop()
self.back_queue.appendleft(tmp_val)
def pushFront(self, val: int) -> None:
self.front_queue.appendleft(val)
self.length += 1
self.adjust()
def pushMiddle(self, val: int) -> None:
self.adjust()
if self.length % 2 == 0:
self.front_queue.append(val)
else:
self.back_queue.appendleft(val)
self.length += 1
def pushBack(self, val: int) -> None:
self.back_queue.append(val)
self.length += 1
self.adjust()
def popFront(self) -> int:
self.adjust()
if not self.front_queue and not self.back_queue:
return -1
if not self.front_queue:
self.length -= 1
return self.back_queue.popleft()
self.length -= 1
return self.front_queue.popleft()
def popMiddle(self) -> int:
self.adjust()
if self.length % 2 == 0:
if not self.front_queue:
return -1
self.length -= 1
return self.front_queue.pop()
else:
if not self.back_queue:
return -1
self.length -= 1
return self.back_queue.popleft()
def popBack(self) -> int:
self.adjust()
if not self.back_queue:
return -1
self.length -= 1
return self.back_queue.pop()
503. 下一个更大元素 II
503. 下一个更大元素 II
from typing import List
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
ans = [-1 for i in range(len(nums))]
stack = []
for index in range(len(nums) * 2 - 1):
while stack and nums[index % len(nums)] > nums[stack[-1]]:
ans[stack[-1]] = nums[index % len(nums)]
stack.pop()
stack.append(index % len(nums))
return ans
2169. 得到 0 的操作数
2169. 得到 0 的操作数
class Solution:
def countOperations(self, num1: int, num2: int) -> int:
cnt = 0
while num2 and num1:
if num1 >= num2:
num1 = num1 - num2
else:
num2 = num2 - num1
cnt += 1
return cnt
2520. 统计能整除数字的位数
2520. 统计能整除数字的位数
from collections import Counter
class Solution:
def countDigits(self, num: int) -> int:
c = Counter(str(num))
ans = 0
for k, v in c.items():
if num % int(k) == 0:
ans += v
return ans
468. 验证IP地址
468. 验证IP地址
class Solution:
def validIPAddress(self, queryIP: str) -> str:
try:
if '.' in queryIP:
return self.check_ipv4(queryIP)
elif ':' in queryIP:
return self.check_ipv6(queryIP)
except:
pass
return "Neither"
def check_ipv4(self, ip):
ip = ip.split('.')
if len(ip) != 4:
return "Neither"
for i in range(len(ip)):
if int(ip[i]) < 0 or int(ip[i]) > 255:
return "Neither"
if len(ip[i]) > 1 and ip[i].startswith('0'):
return "Neither"
return "IPv4"
def check_ipv6(self, ip):
if set(ip) - set("0123456789ABCDEFabcdef:"):
return "Neither"
ip = ip.split(':')
if len(ip) != 8:
return "Neither"
for i in range(len(ip)):
if len(ip[i]) < 1 or len(ip[i]) > 4:
return "Neither"
return "IPv6"
Comments | NOTHING