algorithm/problem/leetcode/3040
3040. 相同分数的最大操作数目 II(1709)
给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作中的 任意 一个:
选择 nums 中最前面两个元素并且删除它们。
选择 nums 中最后两个元素并且删除它们。
选择 nums 中第一个和最后一个元素并且删除它们。
一次操作的 分数 是被删除元素的和。
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。
请你返回按照上述要求 最多 可以进行的操作次数。
示例 1:
1234567输入:nums = [3,2,1,2,3,4]输出:3解释:我们执行以下操作:- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,2,3,4] 。- 删除第一个元素和最后一个元素,分数为 1 + 4 = 5 ,nums = [2,3] 。- 删除第一个元素和最后一个元素,分数为 2 + 3 = 5 ,nums = [] 。由于 nums 为空,我们无法继续进行任何操作。
示例 2:
123456输入:nums = [3,2,6,1,4]输出:2解释:我们执行以下操作:- 删除前 ...
algorithm/problem/leetcode/5
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例 2:
12输入:s = "cbbd"输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
区间dp:记忆化搜索
dfs函数也可以返回boolean值来实现
123456789101112131415161718192021222324252627282930class Solution { int L = -1, R = -1, RES = -1; public String longestPalindrome(String s) { char cs[] = s.toCharArray(); int n = cs.length; String res = ""; ...
algorithm/problem/leetcode/516
516. 最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
123输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。
示例 2:
123输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。
提示:
1 <= s.length <= 1000
s 仅由小写英文字母组成
区间dp(记忆化搜索)
123456789101112131415161718class Solution { public int longestPalindromeSubseq(String s) { char cs[] = s.toCharArray(); int n = cs.length; int memo[][] = new int[n][n]; ...
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,所有异或值中的最大值 ...