leetcode-top100数组专题下

第一题:48.旋转图像

题目链接

48. 旋转图像 - 力扣(LeetCode)

解题思路

辅助数组

首先我们分析位置关系

matrix_new[j][n - i - 1] = matrix[i][j]

如果我们使用一个辅助数组

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        # Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
        matrix_new = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(n):
                matrix_new[j][n - i - 1] = matrix[i][j]
        # 不能写成 matrix = matrix_new
        matrix[:] = matrix_new
使用翻转代替旋转
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        # 水平翻转
        for i in range(n // 2):
            for j in range(n):
                matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]
        # 主对角线翻转
        for i in range(n):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

第二题:240.搜索二维矩阵

题目链接

240. 搜索二维矩阵 II - 力扣(LeetCode)

解题思路

暴力破解
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        for row in matrix:
            for element in row:
                if element == target:
                    return True
        return False
二分查找
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        for row in matrix:
            idx = bisect.bisect_left(row, target)
            if idx < len(row) and row[idx] == target:
                return True
        return False

idx = bisect.bisect_left(row, target) 这行代码的意思是使用二分查找算法在列表 row 中查找目标值 target 的插入位置。

具体来说,bisect.bisect_left 是Python标准库 bisect 中的一个函数,它用于在有序序列中查找目标值的插入位置。该函数返回一个索引值 idx,表示如果将目标值插入到列表中,应该插入的位置。

你可能感兴趣的:(leetcode,算法,职场和发展)