摘要:
给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 从起始单元格出发,你可以移动到同一行或同一列 中的任何其他单元格,但前提是目标单元格的值严格大于当前单元格的值 求能访问的最多单元格数 ###1. 动态规划(超时) 如果对每一个点进行递归搜索,时 阅读全文
摘要:
给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。 在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。 ###1. 贪 阅读全文
摘要:
两个数的最大公因数大于一时,表示两个数连通 给一个数组,判断该数组是否全连通 ###1. 并查集 通过质因数间接合并数组中所有数 ``` #define limit (int)1e5 vector fac[limit + 10];//建立一个二维数组存储每一个数的全部质因数 // 全局预处理每个数的 阅读全文
摘要:
给你一个整数数组 nums 和一个正整数 k 。你可以选择数组的任一子序列并且对其全部元素求和。 数组的第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复) 返回数组的第 k 大和 ###1. 转化问题 + 大根堆 ``` class Solution { public 阅读全文
摘要:
给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k 请你返回第 k (从 1 开始编号)小的 nums1[i] * nums2[j] 的乘积 ###1. 二分查找 ``` class Solution { public: typedef long l 阅读全文
摘要:
数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 & nums, int k) { int n = nums.size(); sort(nums.begin 阅读全文
摘要:
给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列 你可以从每一行中选出1个元素形成一个数组,返回所有可能数组中的第k个最小数组和 ###1. 暴力 逐行遍历 贪心记录加上当前行的值后,前k个最小数组和 ``` class Solution { public 阅读全文
摘要:
###1. [滑动谜题](https://www.cnblogs.com/929code/p/17436699.html) ###2. [转化为全零矩阵的最少反转次数](https://www.cnblogs.com/929code/p/17436196.html) ###3. [推箱子](http 阅读全文
摘要:
在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换 最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开 ###1. 广度优先搜索 ``` class 阅读全文
摘要:
类包括根据顶点数和边初始化的构造函数,添加边,求两点最短路径等函数 ###1. 迪杰斯特拉算法(邻接矩阵) ``` class Graph { private: vector> graph; public: Graph(int n, vector>& edges) { graph.resize(n, 阅读全文