本帖最后由 上岸算法 于 2022-5-5 00:11 编辑 ( [1 Q- @+ ^0 T) p i1 q
, Z. y/ ?- d4 z' p1 h4 D
【 NO.1 移除指定数字得到的最大结果】
/ B+ o0 U3 g D# Q解题思路
5 ]6 r' i6 j" N$ i
; I' [5 V7 `6 A8 p. a可以使用 BigInteger 来比较大小。
, l f' @ A, j9 B/ O+ W3 {& ~- T$ T" ~8 B, t, D
代码展示
$ x4 D$ E1 F! O9 v8 e4 ]0 `" e- P$ D+ s1 y
2 r3 y* \/ D3 \& O% F( R7 X
+ h) b/ l/ @2 I: L. _【 NO.2 必须拿起的最小连续卡牌数】" }, \, k4 ~- N* J9 _: g! D
2 O `* w0 |- Z& C( M# I# ^9 C解题思路
8 l" ~7 g- o3 s i5 K' X) f6 t5 X0 i: E* M
题意即求相距最近的两个等值元素的距离,遍历一次,记录每个值上一次出现的位置即可。
( A+ S2 m: Z% ?" p6 S7 A3 X. z4 X
代码展示1 o8 H2 q1 I1 L! [
1 f1 a. x$ r) T$ V( E
) Y! C* P. W4 ]! v& o& d
, b2 u; Q9 x$ K
【 NO.3 含最多 K 个可整除元素的子数组】1 n7 [% E3 _ T: w7 P
# I, e# D( R( }' N o# `) P" p
解题思路
4 t) c% T1 x: t/ H
4 t* C/ C- C' `! l3 _3 s定义一个 SubSeq 类,实现如下几个方法即可用 HashSet 统计数量。
7 D4 h* R/ i; O$ }' H/ e3 Q! U1 k0 _0 b* a" k% ~6 m e
hashCode 计算哈希值
& y: d9 l! ^1 [5 |check 检查是否满足最多有 k 个能被 p 整除的元素
@# n6 ~4 L3 @equals 检查是否相等
; _1 h) S& E/ s. G+ f* w0 b( g# D! R5 x0 J! Y1 d
代码展示
6 L6 b/ y: b" t5 ^
* @6 I3 i: q! m% S, A
3 |4 v. \' Z. m @* x3 k
2 o$ v) X [) q) p7 V6 U2 \/ J【 NO.4 字符串的总引力】# h) w. Q7 e( o7 U$ ~4 P
! s0 G$ k, e7 A3 @解题思路
, `/ e, z n/ w0 L
" q6 Y" H# g5 ]: B* l- S5 e" r定义 f 表示以第 i 个字符结尾的子串的引力总和,再定义 pos 表示字符 i 上一次出现的位置。5 i# G* F6 R7 V# N# y
6 @) G2 a/ R' R3 V. R! H( _7 o% x; \0 a
则有 f = f[i - 1] + (i - 1 - pos[charAt[i - 1]])8 T# C; `; l7 @5 d1 M
9 X$ p8 J3 f1 \' `* C2 l) [
因为以 i 结尾的子串中,pos[charAt[i - 1]] + 1 到 i 之间的子串都会多出一个字符 charAt[i - 1],而其他的子串的总引力与以 i - 1 结尾的子串的总引力相等。# _7 I2 S* t8 t: S' E: |+ h
; i/ H; R, u! |( [$ n2 o, f* ^4 R. h代码展示
; p" F: o1 d% l7 W# Z. A( p9 k! Z7 O4 z& x5 o
8 m' b8 \- C0 x2 M' V" M, p. S P
|