- 标签:
- 【题单】数学算法 (91)
- 【题单】位运算 (54)
- 【题单】图论算法 (48)
- 【题单】滑动窗口与双指针 (36)
- Important (31)
- 【题单】网格图(DFS/BFS/综合应用) (17)
- 面试题 (13)
- Redis (10)
- LeetCode 热题 100 (8)
- 面试经典 150 题 (5)
- LeetCode 周赛 (3)
- 动态规划 (3)
- LLM (1)
- 数论 (1)
- 差分 (1)
- 计算机理论 (1)
有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位都是范围 [0, k - 1] 中的一个数字。 保险箱有一种特殊的密码校验方法,你可以随意输入密码序列,保险箱会自动记住 最后 n 位输入 ,如果匹配,则能够打开保险箱。 • 例如,正确的密码是 "345" ,并且你输入的是 "012345" : ◦ 输入 0 之后,最后 3 位输入是 "0" ,不正确。 ◦ 输入 1 之后,最后 3 位输入是 "01" ,不正确。 ◦ 输入 2 之后,最后 3 位输入是 "012" ,不正确。 ◦ 输入 3 之后,最后 3 位输入是 "123" ,不正确。 ◦ 输入 4 之后,最后 3 位输入是 "234" ,不正确。 ◦ 输入 5 之后,最后 3 位输入是 "345" ,正确,打开保险箱。 在只知道密码位数 n 和范围边界 k 的前提下,请你找出并返回确保在输入的 某个时刻 能够打开保险箱的任一 最短 密码序列 。
有一个 m x n 大小的矩形蛋糕,需要切成 1 x 1 的小块。 给你整数 m ,n 和两个数组: • horizontalCut 的大小为 m - 1 ,其中 horizontalCut[i] 表示沿着水平线 i 切蛋糕的开销。 • verticalCut 的大小为 n - 1 ,其中 verticalCut[j] 表示沿着垂直线 j 切蛋糕的开销。 一次操作中,你可以选择任意不是 1 x 1 大小的矩形蛋糕并执行以下操作之一: 1. 沿着水平线 i 切开蛋糕,开销为 horizontalCut[i] 。 2. 沿着垂直线 j 切开蛋糕,开销为 verticalCut[j] 。 每次操作后,这块蛋糕都被切成两个独立的小蛋糕。 每次操作的开销都为最开始对应切割线的开销,并且不会改变。 请你返回将蛋糕全部切成 1 x 1 的蛋糕块的 最小 总开销。
一个公司在全国有 n 个分部,它们之间有的有道路连接。一开始,所有分部通过这些道路两两之间互相可以到达。 公司意识到在分部之间旅行花费了太多时间,所以它们决定关闭一些分部(也可能不关闭任何分部),同时保证剩下的分部之间两两互相可以到达且最远距离不超过 maxDistance 。 两个分部之间的 距离 是通过道路长度之和的 最小值 。 给你整数 n ,maxDistance 和下标从 0 开始的二维整数数组 roads ,其中 roads[i] = [ui, vi, wi] 表示一条从 ui 到 vi 长度为 wi的 无向 道路。 请你返回关闭分部的可行方案数目,满足每个方案里剩余分部之间的最远距离不超过 maxDistance。 注意,关闭一个分部后,与之相连的所有道路不可通行。 注意,两个分部之间可能会有多条道路。
给你两个下标从 0 开始的字符串 source 和 target ,它们的长度均为 n 并且由 小写 英文字母组成。 另给你两个下标从 0 开始的字符数组 original 和 changed ,以及一个整数数组 cost ,其中 cost[i] 代表将字符 original[i] 更改为字符 changed[i] 的成本。 你从字符串 source 开始。在一次操作中,如果 存在 任意 下标 j 满足 cost[j] == z 、original[j] == x 以及 changed[j] == y 。你就可以选择字符串中的一个字符 x 并以 z 的成本将其更改为字符 y 。 返回将字符串 source 转换为字符串 target 所需的 最小 成本。如果不可能完成转换,则返回 -1 。 注意,可能存在下标 i 、j 使得 original[j] == original[i] 且 changed[j] == changed[i] 。
现有一个加权无向连通图。给你一个正整数 n ,表示图中有 n 个节点,并按从 1 到 n 给节点编号;另给你一个数组 edges ,其中每个 edges[i] = [ui, vi, weighti] 表示存在一条位于节点 ui 和 vi 之间的边,这条边的权重为 weighti 。 从节点 start 出发到节点 end 的路径是一个形如 [z0, z1, z2, ..., zk] 的节点序列,满足 z0 = start 、zk = end 且在所有符合 0 <= i <= k-1 的节点 zi 和 zi+1 之间存在一条边。 路径的距离定义为这条路径上所有边的权重总和。用 distanceToLastNode(x) 表示节点 n 和 x 之间路径的最短距离。受限路径 为满足 distanceToLastNode(zi) > distanceToLastNode(zi+1) 的一条路径,其中 0 <= i <= k-1 。 返回从节点 1 出发到节点 n 的 受限路径数 。由于数字可能很大,请返回对 109 + 7 取余 的结果。
给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 edges 表示,其中 edges[i] = [fromi, toi, edgeCosti] 表示从 fromi 到 toi 有一条代价为 edgeCosti 的边。 请你实现一个 Graph 类: • Graph(int n, int[][] edges) 初始化图有 n 个节点,并输入初始边。 • addEdge(int[] edge) 向边集中添加一条边,其中 edge = [from, to, edgeCost] 。数据保证添加这条边之前对应的两个节点之间没有有向边。 • int shortestPath(int node1, int node2) 返回从节点 node1 到 node2 的路径 最小 代价。如果路径不存在,返回 -1 。一条路径的代价是路径中所有边代价之和。