LeetCode(2023-12-15)


1299. 将每个元素替换为右侧最大元素

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. 球会落何处

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

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. 加一

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. 给植物浇水

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. 将字符串拆分为递减的连续值

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. 最小栈

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. 最大矩形

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

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-12-15)


我的朋友,理论是灰色的,而生活之树是常青的!