随笔分类 -  LeetCode

上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页
摘要:给定正整数 n,返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 ####一. 数位dp + 逆向思维 首先将问题转化为不含重复数字的个数 定义f(i,mask,islimit,isnum) 表示构造第i位及之后数位的合法方案数 mask 表示前面数的状态,用于判断枚举数是否 阅读全文
posted @ 2023-06-07 03:40 失控D大白兔
摘要:给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件,我们称它是一个好整数: * num1 f = [&](int i, int sum, bool is_limit) -> int { if (sum > max_sum) 阅读全文
posted @ 2023-06-07 00:39 失控D大白兔
摘要:本质上就是**动态规划**,只需记录位数和前一个数的状态,其后满足条件的个数是固定的 数位dp还要多记录一个受限状态,以及前面全为0的特殊处理状态 处理范围内的数时,相当于利用前缀和的思想进行处理 我们可以用f(n)表示[0,n]的所有满足条件的个数,我们对于[l,r] 区间内满足条件的个数,就可以 阅读全文
posted @ 2023-06-04 17:59 失控D大白兔
摘要:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A) == average(B) ####1. 折半查找+二进制枚举 首先将问题转化为求目标和为特定值 将所有数乘以n减去总和,转化成为求目标 阅读全文
posted @ 2023-06-04 17:56 失控D大白兔
摘要:一般采用回溯法思想,但需要将问题进行转化,同时采用动态规划减小时间复杂度 ####1. [分割等和子数组](https://www.cnblogs.com/929code/p/16453098.html) ####2. [零钱兑换](https://www.cnblogs.com/929code/p 阅读全文
posted @ 2023-06-02 15:17 失控D大白兔
摘要:给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 从起始单元格出发,你可以移动到同一行或同一列 中的任何其他单元格,但前提是目标单元格的值严格大于当前单元格的值 求能访问的最多单元格数 ###1. 动态规划(超时) 如果对每一个点进行递归搜索,时 阅读全文
posted @ 2023-06-02 02:23 失控D大白兔
摘要:给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。 在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。 ###1. 贪 阅读全文
posted @ 2023-05-31 23:17 失控D大白兔
摘要:两个数的最大公因数大于一时,表示两个数连通 给一个数组,判断该数组是否全连通 ###1. 并查集 通过质因数间接合并数组中所有数 ``` #define limit (int)1e5 vector fac[limit + 10];//建立一个二维数组存储每一个数的全部质因数 // 全局预处理每个数的 阅读全文
posted @ 2023-05-31 00:38 失控D大白兔
摘要:给你一个整数数组 nums 和一个正整数 k 。你可以选择数组的任一子序列并且对其全部元素求和。 数组的第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复) 返回数组的第 k 大和 ###1. 转化问题 + 大根堆 ``` class Solution { public 阅读全文
posted @ 2023-05-30 00:52 失控D大白兔
摘要:给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k 请你返回第 k (从 1 开始编号)小的 nums1[i] * nums2[j] 的乘积 ###1. 二分查找 ``` class Solution { public: typedef long l 阅读全文
posted @ 2023-05-29 23:42 失控D大白兔
摘要:数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 & nums, int k) { int n = nums.size(); sort(nums.begin 阅读全文
posted @ 2023-05-29 15:28 失控D大白兔
摘要:给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列 你可以从每一行中选出1个元素形成一个数组,返回所有可能数组中的第k个最小数组和 ###1. 暴力 逐行遍历 贪心记录加上当前行的值后,前k个最小数组和 ``` class Solution { public 阅读全文
posted @ 2023-05-28 15:09 失控D大白兔
摘要:###1. [滑动谜题](https://www.cnblogs.com/929code/p/17436699.html) ###2. [转化为全零矩阵的最少反转次数](https://www.cnblogs.com/929code/p/17436196.html) ###3. [推箱子](http 阅读全文
posted @ 2023-05-27 14:32 失控D大白兔
摘要:在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换 最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开 ###1. 广度优先搜索 ``` class 阅读全文
posted @ 2023-05-27 14:28 失控D大白兔
摘要:类包括根据顶点数和边初始化的构造函数,添加边,求两点最短路径等函数 ###1. 迪杰斯特拉算法(邻接矩阵) ``` class Graph { private: vector> graph; public: Graph(int n, vector>& edges) { graph.resize(n, 阅读全文
posted @ 2023-05-27 13:46 失控D大白兔
摘要:二进制矩阵,可以选择任意位置进行反转,其周围格子也会跟着反转 求使得矩阵全为0的最少反转次数 ###1. 广度优先搜索 将每个状态转化为字符串进行存储,方便剪枝和压缩 ``` class Solution { public: int m; int n; vector> dir = {{0,0},{1 阅读全文
posted @ 2023-05-27 02:41 失控D大白兔
摘要:给一系列顶点,计算这些点能组成矩形的最小面积 ###1. 最小面积矩形(列举对角线+哈希) **矩形的边平行于x轴和y轴** 通过双重循环列举对角线顶点,计算满足条件的矩形面积 ``` class Solution { public: int minAreaRect(vector>& points) 阅读全文
posted @ 2023-05-25 20:39 失控D大白兔
摘要:一个数组的分数定义为数组之和乘以数组的长度 ###1. 前缀和 + 二分 ``` class Solution { public: long long countSubarrays(vector& nums, long long k) { //注意是正整数数组 int n = nums.size() 阅读全文
posted @ 2023-05-24 19:26 失控D大白兔
摘要:将数组分为三个部分,每部分对应二进制数值相同 ###1. 三指针 各部分1的数目应当相同,借助这个性质来找三个指针的起始位置 根据最后一个指针起始位置确定串的长度,逐位比较即可 ``` class Solution { public: vector threeEqualParts(vector& a 阅读全文
posted @ 2023-05-24 18:49 失控D大白兔
摘要:在一颗无向树上青蛙从顶点1起跳,问T秒后停留在目标位置的概率 ###1. 深度优先搜索 问题规模可以进一步递归拆分,概率等于下一个节点到目标概率的平均值 ``` class Solution { public: double frogPosition(int n, vector>& edges, i 阅读全文
posted @ 2023-05-24 01:10 失控D大白兔

上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页