algorithm-problem-leetcode-1143
1143. 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
示例 1:
123输入:text1 = "abcde", text2 = "ace" 输出:3 解释:最长公共子序列是 "ace" ,它的长度为 3 。
示例 2:
123输入:text1 = "abc", text2 = "abc"输出:3解释:最长公共子序列是 "abc" ,它的长度为 3 。
示例 3:
123输入:text ...
algorithm-problem-leetcode-3277
3277. 查询子数组最大异或值
给你一个由 n 个整数组成的数组 nums,以及一个大小为 q 的二维整数数组 queries,其中 queries[i] = [li, ri]。
对于每一个查询,你需要找出 nums[li..ri] 中任意
子数组
的 最大异或值。
数组的异或值 需要对数组 a 反复执行以下操作,直到只剩一个元素,剩下的那个元素就是 异或值:
对于除最后一个下标以外的所有下标 i,同时将 a[i] 替换为 a[i] XOR a[i + 1] 。
移除数组的最后一个元素。
返回一个大小为 q 的数组 answer,其中 answer[i] 表示查询 i 的答案。
示例 1:
输入: nums = [2,8,4,32,16,1], queries = [[0,2],[1,4],[0,5]]
输出: [12,60,60]
解释:
在第一个查询中,nums[0..2] 的子数组分别是 [2], [8], [4], [2, 8], [8, 4], 和 [2, 8, 4],它们的异或值分别为 2, 8, 4, 10, 12, 和 6。查询的答案是 12,所有异或值中的最大值 ...
algorithm-problem-nowcoder-64819-A
山峰序列
给定一个数组nums = [i, ..., j],如果这个数组先递增再递减,那么称这个数组为山峰序列
现在给你一个数组,需要重排这个数组,请问有多少种方法可以使重排后的数组为山峰序列
答案可能过大,所以你需要输出答案对于 998244353 的余数
示例 1:
123输入:n = 2, nums = [1,2,3]输出:4解释:[1,2,3],[1,3,2],[2,3,1],[3,2,1]
示例 2:
123输入:n = 3, nums = [3,3,3]输出:1解释:[3,3,3]
示例 3:
123输入:n = 3, nums = [1,2,1]输出:3解释:[1,1,2],[1,2,1],[2,1,1]
提示:
1 <= n <= 10^5
1 <= nums[i] <= 10^9
这个问题相当于去除所有最大数值的元素后,对于剩下的元素组成的数组,查找可以组成的数组的数量,即组合数
例如示例1,去除3后,1和2可以组成4种情况:[],[1],[2],[1,2]
可以发现,如果元素不重复,那么答案很简单,就是2^n
但是如果元素有重复那么直接查 ...
algorithm-problem-leetcode-3276
3276. 选择矩阵中单元格的最大得分
给你一个由正整数构成的二维矩阵 grid。
你需要从矩阵中选择 一个或多个 单元格,选中的单元格应满足以下条件:
所选单元格中的任意两个单元格都不会处于矩阵的 同一行。
所选单元格的值 互不相同。
你的得分为所选单元格值的总和。
返回你能获得的 最大 得分。
示例 1:
输入: grid = [[1,2,3],[4,3,2],[1,1,1]]
输出: 8
解释:
选择上图中用彩色标记的单元格,对应的值分别为 1、3 和 4 。
示例 2:
输入: grid = [[8,7,6],[8,3,2]]
输出: 15
解释:
选择上图中用彩色标记的单元格,对应的值分别为 7 和 8 。
提示:
1 <= grid.length, grid[i].length <= 10
1 <= grid[i][j] <= 100
动态规划:枚举值域,状压行号
12345678910111213141516171819202122232425262728class Solution { public int maxSc ...