【 NO.1 移除指定数字得到的最大结果】
解题思路
可以使用 BigInteger
来比较大小。
代码展示
【 NO.2 必须拿起的最小连续卡牌数】
解题思路
题意即求相距最近的两个等值元素的距离,遍历一次,记录每个值上一次出现的位置即可。
代码展示
【 NO.3 含最多 K 个可整除元素的子数组】
解题思路
定义一个 SubSeq
类,实现如下几个方法即可用 HashSet 统计数量。
-
hashCode
计算哈希值 -
check
检查是否满足最多有 k 个能被 p 整除的元素 -
equals
检查是否相等
代码展示
【 NO.4 字符串的总引力】
解题思路
定义 f[i]
表示以第 i 个字符结尾的子串的引力总和,再定义 pos[i]
表示字符 i 上一次出现的位置。
则有 f[i] = f[i - 1] + (i - 1 - pos[charAt[i - 1]])
因为以 i 结尾的子串中,pos[charAt[i - 1]] + 1
到 i
之间的子串都会多出一个字符 charAt[i - 1]
,而其他的子串的总引力与以 i - 1
结尾的子串的总引力相等。
代码展示