1299. 将每个元素替换为右侧最大元素
class Solution:
def replaceElements(self, arr: List[int]) -> List[int]:
max_val = -1
last_val = arr[-1]
for i in range(len(arr) - 2, -1, -1):
max_val = max(last_val, max_val)
last_val = arr[i]
arr[i] = max_val
arr[-1] = -1
return arr
1706. 球会落何处
class Solution:
def findBall(self, grid: List[List[int]]) -> List[int]:
ans = [-1 for i in range(len(grid[0]))]
for i in range(len(grid[0])):
pos = [0, i]
while True:
if pos[0] == len(grid):
ans[i] = pos[1]
break
if grid[pos[0]][pos[1]] == 1 and pos[1] != len(grid[pos[0]]) - 1 and grid[pos[0]][pos[1] + 1] == 1:
pos[0] = pos[0] + 1
pos[1] = pos[1] + 1
elif grid[pos[0]][pos[1]] == -1 and pos[1] != 0 and grid[pos[0]][pos[1] - 1] == -1:
pos[0] = pos[0] + 1
pos[1] = pos[1] - 1
else:
break
return ans
2498. 青蛙过河 II
贪心
class Solution:
def maxJump(self, stones: List[int]) -> int:
ans = stones[1] - stones[0]
for i in range(2, len(stones)):
ans = max(ans, stones[i] - stones[i - 2])
return ans
66. 加一
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
flag = False
for i in range(len(digits) - 1, -1, -1):
flag = False
digits[i] += 1
if digits[i] == 10:
digits[i] = 0
flag = True
if not flag:
break
if flag:
digits.insert(0, 1)
return digits
2079. 给植物浇水
class Solution:
def wateringPlants(self, plants: List[int], capacity: int) -> int:
step = 0
now_water = capacity
for i in range(len(plants)):
if now_water < plants[i]:
now_water = capacity
step += i * 2
now_water -= plants[i]
step += 1
return step
1849. 将字符串拆分为递减的连续值
class Solution:
def splitString(self, s: str) -> bool:
for i in range(1, len(s) + 1):
start_num = int(s[:i])
next_num = start_num - 1
p0 = i
p1 = i + 1
while p1 <= len(s):
num = int(s[p0: p1])
if next_num == num:
if next_num == 0:
if int(s[p0:]) != 0:
break
else:
return True
if p1 == len(s):
return True
p0 = p1
next_num -= 1
elif next_num < num:
break
p1 += 1
return False
155. 最小栈
class MinStack:
def __init__(self):
self.stack = []
self.min_stack = [float('inf')]
def push(self, val: int) -> None:
self.stack.append(val)
self.min_stack.append(min(val, self.min_stack[-1]))
def pop(self) -> None:
self.stack.pop()
self.min_stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
85. 最大矩形
class Solution:
def maximalRectangle(self, matrix) -> int:
max_area = 0
for i in range(len(matrix)):
for j in range(len(matrix[i])):
matrix[i][j] = int(matrix[i][j])
if matrix[i][j] == 0:
continue
matrix[i][j] = (int(matrix[i][j - 1]) if j - 1 >= 0 else 0) + matrix[i][j]
max_area = max(max_area, matrix[i][j])
for j in range(len(matrix[0])):
for i in range(len(matrix)):
now = matrix[i][j]
if now == 0:
continue
area = 0
for k in range(i, len(matrix)):
if matrix[k][j] < now:
break
area += now
for k in range(i - 1, -1, -1):
if matrix[k][j] < now:
break
area += now
max_area = max(area, max_area)
return max_area
Comments | NOTHING