0%

    753. 破解保险箱


    有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 。

    你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱。

    举个例子,假设密码是 "345",你可以输入 "012345" 来打开它,只是你输入了 6 个字符.

    请返回一个能打开保险箱的最短字符串。

    示例1:

    ```txt

    输入: n = 1, k = 2

    输出: "01"

    说明: "10"也可以打开保险箱。

    ```

    示例2:

    ```txt

    输入: n = 2, k = 2

    输出: "00110"

    说明: "01100", "10011", "11001" 也能打开保险箱。

    ```

    提示:

    1. n 的范围是 [1, 4]

    2. k 的范围是 [1, 10]

    3. k^n 最大可能为 4096

阅读全文 »

    332. 重新安排行程


    给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。

    所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。

    • 例如,行程 ["JFK", "LGA"]["JFK", "LGB"] 相比就更小,排序更靠前。

    假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。

    示例 1:

    ```txt

    输入:tickets = [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR","SFO"]]

    输出:["JFK","MUC","LHR","SFO","SJC"]

    ```

    示例 2:

    ```txt

    输入:tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]

    输出:["JFK","ATL","JFK","SFO","ATL","SFO"]

    解释:另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"] ,但是它字典排序更大更靠后。

    ```

    提示:

    • 1 <= tickets.length <= 300

    • tickets[i].length == 2

    • fromi.length == 3

    • toi.length == 3

    • fromitoi 由大写英文字母组成

    • fromi != toi

阅读全文 »

    3013. 将数组分成最小总代价的子数组 II


    给你一个下标从 0 开始长度为 n 的整数数组 nums 和两个  整数 k 和 dist 。

    一个数组的 代价 是数组中的 第一个 元素。比方说,[1,2,3] 的代价为 1 ,[3,4,1] 的代价为 3 。

    你需要将 nums 分割成 k 个 连续且互不相交 的子数组,满足 第二 个子数组与第 k 个子数组中第一个元素的下标距离 不超过 dist 。换句话说,如果你将 nums 分割成子数组 nums[0..(i1 - 1)], nums[i1..(i2 - 1)], ..., nums[ik-1..(n - 1)] ,那么它需要满足 ik-1 - i1 <= dist 。

    请你返回这些子数组的 最小 总代价。

    示例 1:

    ```txt

    输入:nums = [1,3,2,6,4,2], k = 3, dist = 3

    输出:5

    解释:将数组分割成 3 个子数组的最优方案是:[1,3] ,[2,6,4] 和 [2] 。这是一个合法分割,因为 ik-1 - i1 等于 5 - 2 = 3 ,等于 dist 。总代价为 nums[0] + nums[2] + nums[5] ,也就是 1 + 2 + 2 = 5 。

    5 是分割成 3 个子数组的最小总代价。

    ```

    示例 2:

    ```txt

    输入:nums = [10,1,2,2,2,1], k = 4, dist = 3

    输出:15

    解释:将数组分割成 4 个子数组的最优方案是:[10] ,[1] ,[2] 和 [2,2,1] 。这是一个合法分割,因为 ik-1 - i1 等于 3 - 1 = 2 ,小于 dist 。总代价为 nums[0] + nums[1] + nums[2] + nums[3] ,也就是 10 + 1 + 2 + 2 = 15 。

    分割 [10] ,[1] ,[2,2,2] 和 [1] 不是一个合法分割,因为 ik-1 和 i1 的差为 5 - 1 = 4 ,大于 dist 。

    15 是分割成 4 个子数组的最小总代价。

    ```

    示例 3:

    ```txt

    输入:nums = [10,8,18,9], k = 3, dist = 1

    输出:36

    解释:将数组分割成 4 个子数组的最优方案是:[10] ,[8] 和 [18,9] 。这是一个合法分割,因为 ik-1 - i1 等于 2 - 1 = 1 ,等于 dist 。总代价为 nums[0] + nums[1] + nums[2] ,也就是 10 + 8 + 18 = 36 。

    分割 [10] ,[8,18] 和 [9] 不是一个合法分割,因为 ik-1 和 i1 的差为 3 - 1 = 2 ,大于 dist 。

    36 是分割成 3 个子数组的最小总代价。

    ```

    提示:

    • 3 <= n <= 10^5

    • 1 <= nums[i] <= 10^9

    • 3 <= k <= n

    • k - 2 <= dist <= n - 2

阅读全文 »

    1040. 移动石子直到连续 II


    在一个长度 无限 的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作 端点石子

    每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。

    值得注意的是,如果石子像 stones = [1,2,5] 这样,你将 无法 移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。

    当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。

    要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [minimum_moves, maximum_moves]

    示例 1:

    ```txt

    输入:[7,4,9]

    输出:[1,2]

    解释:

    我们可以移动一次,4 -> 8,游戏结束。

    或者,我们可以移动两次 9 -> 5,4 -> 6,游戏结束。

    ```

    示例 2:

    ```txt

    输入:[6,5,4,3,10]

    输出:[2,3]

    解释:

    我们可以移动 3 -> 8,接着是 10 -> 7,游戏结束。

    或者,我们可以移动 3 -> 7, 4 -> 8, 5 -> 9,游戏结束。

    注意,我们无法进行 10 -> 2 这样的移动来结束游戏,因为这是不合要求的移动。

    ```

    示例 3:

    ```txt

    输入:[100,101,104,102,103]

    输出:[0,0]

    ```

    提示:

    • 3 <= stones.length <= 10^4

    • 1 <= stones[i] <= 10^9

    • stones[i] 的值各不相同。

阅读全文 »

    6293. 统计好子数组的数目


    给你一个整数数组 nums 和一个整数 k ,请你返回 nums 中  子数组的数目。

    一个子数组 arr 如果有 至少 k 对下标 (i, j) 满足 i < j 且 arr[i] == arr[j] ,那么称它是一个  子数组。

    子数组 是原数组中一段连续 非空 的元素序列。

    示例 1:

    ```txt

    输入:nums = [1,1,1,1,1], k = 10

    输出:1

    解释:唯一的好子数组是这个数组本身。

    ```

    示例 2:

    ```txt

    输入:nums = [3,1,4,3,2,2,4], k = 2

    输出:4

    解释:总共有 4 个不同的好子数组:

    • [3,1,4,3,2,2] 有 2 对。

    • [3,1,4,3,2,2,4] 有 3 对。

    • [1,4,3,2,2,4] 有 2 对。

    • [4,3,2,2,4] 有 2 对。

    ```

    提示:

    • 1 <= nums.length <= 10^5

    • 1 <= nums[i], k <= 10^9

阅读全文 »

    2953. 统计完全子字符串


    给你一个字符串 word 和一个整数 k 。

    如果 word 的一个子字符串 s 满足以下条件,我们称它是 完全字符串:

    • s 中每个字符 恰好 出现 k 次。

    • 相邻字符在字母表中的顺序 至多 相差 2 。也就是说,s 中两个相邻字符 c1 和 c2 ,它们在字母表中的位置相差 至多 为 2

    请你返回 word 中 完全 子字符串的数目。

    子字符串 指的是一个字符串中一段连续 非空 的字符序列。

    示例 1:

    ```txt

    输入:word = "igigee", k = 2

    输出:3

    解释:完全子字符串需要满足每个字符恰好出现 2 次,且相邻字符相差至多为 2 :igigee, igigee, igigee 。

    ```

    示例 2:

    ```txt

    输入:word = "aaabbbccc", k = 3

    输出:6

    解释:完全子字符串需要满足每个字符恰好出现 3 次,且相邻字符相差至多为 2 :aaabbbccc, aaabbbccc, aaabbbccc, aaabbbccc, aaabbbccc, aaabbbccc 。

    ```

    提示:

    • 1 <= word.length <= 10^5

    • word 只包含小写英文字母。

    • 1 <= k <= word.length

阅读全文 »

    1330. 翻转子数组得到最大的数组值


    给你一个整数数组 nums 。「数组值」定义为所有满足 0 <= i < nums.length-1 的 |nums[i]-nums[i+1]| 的和。

    你可以选择给定数组的任意子数组,并将该子数组翻转。但你只能执行这个操作 一次

    请你找到可行的最大 数组值 。

    示例 1:

    ```txt

    输入:nums = [2,3,1,5,4]

    输出:10

    解释:通过翻转子数组 [3,1,5] ,数组变成 [2,5,1,3,4] ,数组值为 10 。

    ```

    示例 2:

    ```txt

    输入:nums = [2,4,9,24,2,1,10]

    输出:68

    ```

    提示:

    • 1 <= nums.length <= 3*10^4

    • -10^5 <= nums[i] <= 10^5

阅读全文 »