随笔分类 -  LeetCode / LeetCode困难速刷

摘要:给你两个数字字符串 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大白兔
摘要:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A) == average(B) ####1. 折半查找+二进制枚举 首先将问题转化为求目标和为特定值 将所有数乘以n减去总和,转化成为求目标 阅读全文
posted @ 2023-06-04 17:56 失控D大白兔
摘要:给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 从起始单元格出发,你可以移动到同一行或同一列 中的任何其他单元格,但前提是目标单元格的值严格大于当前单元格的值 求能访问的最多单元格数 ###1. 动态规划(超时) 如果对每一个点进行递归搜索,时 阅读全文
posted @ 2023-06-02 02:23 失控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大白兔
摘要:在一个 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. 前缀和 + 二分 ``` 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大白兔
摘要:给你一个n节点的无向带权连通图,同时告诉你边的端点和权值 对于部分权为-1的边,可以进行修改为任意值,最后使得初始点到目标点最短距离为target ###1. Dijkstra 第一次使用迪杰斯特拉算法,将所有能修改的权值视作1,计算到各点的最短距离 判断该距离是否有操作空间,满足要求的情况下计算要 阅读全文
posted @ 2023-05-23 01:35 失控D大白兔
摘要:给你一棵以 root 为根的 二叉树 ,请你返回任意二叉搜索子树的最大键值和 ###1. 中序遍历+记录多个返回值 ``` class Solution { public: //求子树键值需要后序遍历,判断二叉搜索树需要中序遍历 //判断二叉树也可以用判断左右值加中序遍历的方式,所以这里采用中序遍历 阅读全文
posted @ 2023-05-21 23:00 失控D大白兔
摘要:求所有子序列最大值的平方乘以最小值的和 ###1. 数学规律 首先可以发现顺序对结果没有影响,对原数组按升序进行排序,方便从小到大遍历枚举 由于数据量很大,一般只会遍历一次,所以要找数学规律 考虑遍历时的无后效性,前面数组遍历完后,必然会给后面留下一个值 可以通过这个值和当前遍历值计算出以当前值为结 阅读全文
posted @ 2023-05-19 14:51 失控D大白兔
摘要:给你一个长度为 n 的数组 nums ,该数组由从 1 到 n 的不同整数组成 另给你一个正整数 k ,统计并返回 nums 中的中位数等于 k 的非空子数组的数目 ###1. 前缀和 + 哈希 容易知道子数组必然包含数字k,其实就是列举包含k子数组,计算并且中位数为k的个数 同时列举两侧的复杂度是 阅读全文
posted @ 2023-05-17 19:30 失控D大白兔 阅读(58) 评论(0) 推荐(0)
摘要:你需要制定一份 d 天的工作计划表。工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i)。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一天的难度之和,而一天的工作难度是当天应该完成工作的最大难度。 给你一个整数数组 jobDifficul 阅读全文
posted @ 2023-05-16 10:27 失控D大白兔
摘要:n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。 返回最少交换座位的次数,以便 阅读全文
posted @ 2023-05-15 17:15 失控D大白兔