From cf3ff0c0034b123846be15f72a076aa2c8d9b69d Mon Sep 17 00:00:00 2001 From: "1500906945@qq.com" <1500906945@qq.com> Date: Tue, 11 Apr 2023 22:39:33 +0800 Subject: [PATCH] =?UTF-8?q?yifan=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "1.1\345\210\206\346\262\273.png" | Bin 0 -> 6496 bytes "1.2\345\210\206\346\262\273.png" | Bin 0 -> 6222 bytes alg.md | 138 ++++++++++++++++-------------- alg.py | 40 +++------ gen.py | 23 ++++- main.cpp | 0 test.py | 26 ++---- 7 files changed, 113 insertions(+), 114 deletions(-) create mode 100644 "1.1\345\210\206\346\262\273.png" create mode 100644 "1.2\345\210\206\346\262\273.png" delete mode 100644 main.cpp diff --git "a/1.1\345\210\206\346\262\273.png" "b/1.1\345\210\206\346\262\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..9e3b1b4e1d4262dcd10e1d1ded31a66a524dc57f GIT binary patch literal 6496 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 n3XgwF=Ksg;|GcnzMw07lgJ9Qe List[List[int]]: + matrix = [] + for i in range(m): + row = [] + for j in range(n): + if i == 0 and j == 0: + row.append(random.randint(0, 30)) + elif i == 0: + row.append(max(row[-1], random.randint(0, 30))) + elif j == 0: + col = [matrix[x][0] for x in range(i)] + row.append(max(col[-1], random.randint(0, 30))) + else: + col = [matrix[x][j] for x in range(i)] + row.append(max(row[-1], col[-1], random.randint(0, 30))) + matrix.append(row) + return matrix ``` -## 测试示例 -​ 下面是一个测试代码的例子: + +## 二维矩阵检索算法的思路 + +- 该程序首先通过 `generate_matrix` 函数生成一个大小为 `m*n` 的二维数组,其中每行和每列都是递增的。生成过程中,对于每个位置 `(i, j)`,如果它是首行或首列,则随机生成一个整数,否则选取它的左边和上边的数以及一个随机数中的最大值作为该位置的元素值。 +- 接着,程序通过 `searchMatrix` 函数在生成的二维数组中查找目标整数 `target`,该函数采用双指针法,从右上角开始遍历,如果当前元素比目标整数大,则向左移动指针,否则向下移动指针。如果遍历完整个数组-仍未找到目标整数,则返回 False。 +- 最后,程序打印出生成的二维数组和目标整数,并输出查找结果。 + +## 代码 ```python -import alg -nums = [3, 2, 1, 6, 0, 5] -# 构建最大二叉树 -root = alg.constructMaximumBinaryTree(nums) -# 前序遍历二叉树 -def preorderTraversal(root): - res = [] - def helper(root): - # 如果树为空,则返回None - if not root: - return None - res.append(root.val) - helper(root.left) - helper(root.right) - helper(root) - return res -# 打印遍历结果 -print(preorderTraversal(root)) +def searchMatrix(matrix: List[List[int]], target: int) -> bool: + if not matrix: + return False + row, col = 0, len(matrix[0]) - 1 + while row < len(matrix) and col >= 0: + if matrix[row][col] == target: + return True + elif matrix[row][col] > target: + col -= 1 + else: + row += 1 + return False +m, n = random.randint(2, 10), random.randint(2, 10) +matrix = generate_matrix(m, n) +print("Generated matrix:") +for row in matrix: + print(row) +target = random.randint(0, 30) +print(f"Searching for target {target} in matrix...") +result = searchMatrix(matrix, target) +print(f"Result: {result}") ``` -​ 这个测试代码将一个整数数组传递给 `constructMaximumBinaryTree` 函数,得到该数组构建的最大二叉树的根节点。然后,使用 `preorderTraversal` 函数进行前序遍历,并打印遍历结果。运行该测试代码将输出 `[6,3,2,1,5,0]`,即最大二叉树的前序遍历结果。 -## 时间复杂度分析 -​ 对于一个长度为 `n` 的不重复的整数数组 `nums`,构建最大二叉树的时间复杂度为 $O(n\log n)$。 +## 测试结果 + +![](C:\Users\XUZIY\Desktop\1.1分治.png) -​ 在构建最大二叉树的过程中,每个节点最多会被访问两次,因此时间复杂度为 $O(n)$。而在最坏情况下,数组中的每个数都会成为树的根节点,因此二叉树的深度为 $O(n)$,所以总的时间复杂度为 $O(n\log n)$。 +![](C:\Users\XUZIY\Desktop\1.2分治.png) \ No newline at end of file diff --git a/alg.py b/alg.py index 35282b9..1ddd391 100644 --- a/alg.py +++ b/alg.py @@ -1,28 +1,12 @@ -# Definition for a binary tree node. -class TreeNode: - def __init__(self, val=0, left=None, right=None): - self.val = val - self.left = left - self.right = right - -def constructMaximumBinaryTree(nums): - # 如果数组为空,则返回None - if not nums: - return None - - max_num = max(nums) - - # 找到数组中的最大值及其索引 - idx = nums.index(max_num) - - # 创建根节点,其值为最大值 - root = TreeNode(max_num) - - # 递归地在最大值左边的子数组前缀上构建左子树 - root.left = constructMaximumBinaryTree(nums[:idx]) - - # 递归地在最大值右边的子数组后缀上构建右子树 - root.right = constructMaximumBinaryTree(nums[idx+1:]) - - # 返回构建好的最大二叉树的根节点 - return root +def searchMatrix(matrix: List[List[int]], target: int) -> bool: + if not matrix: + return False + row, col = 0, len(matrix[0]) - 1 + while row < len(matrix) and col >= 0: + if matrix[row][col] == target: + return True + elif matrix[row][col] > target: + col -= 1 + else: + row += 1 + return False \ No newline at end of file diff --git a/gen.py b/gen.py index 1c16f48..42f124a 100644 --- a/gen.py +++ b/gen.py @@ -1,4 +1,19 @@ -nums = [3,2,1,6,0,5] - - - +import random +from typing import List +def generate_matrix(m: int, n: int) -> List[List[int]]: + matrix = [] + for i in range(m): + row = [] + for j in range(n): + if i == 0 and j == 0: + row.append(random.randint(0, 30)) + elif i == 0: + row.append(max(row[-1], random.randint(0, 30))) + elif j == 0: + col = [matrix[x][0] for x in range(i)] + row.append(max(col[-1], random.randint(0, 30))) + else: + col = [matrix[x][j] for x in range(i)] + row.append(max(row[-1], col[-1], random.randint(0, 30))) + matrix.append(row) + return matrix \ No newline at end of file diff --git a/main.cpp b/main.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/test.py b/test.py index 3af3054..af4748a 100644 --- a/test.py +++ b/test.py @@ -1,19 +1,11 @@ import gen import alg - -n = gen.nums -root = alg.constructMaximumBinaryTree(n) -# 前序遍历二叉树 -def preorderTraversal(root): - res = [] - def helper(root): - # 如果树为空,则返回None - if not root: - return None - res.append(root.val) - helper(root.left) - helper(root.right) - helper(root) - return res -# 输出遍历结果 -print(preorderTraversal(root)) +m, n = random.randint(2, 10), random.randint(2, 10) +matrix = generate_matrix(m, n) +print("Generated matrix:") +for row in matrix: + print(row) +target = random.randint(0, 30) +print(f"Searching for target {target} in matrix...") +result = searchMatrix(matrix, target) +print(f"Result: {result}") \ No newline at end of file -- Gitee