本帖最后由 上岸算法 于 2022-5-5 00:11 编辑
; k/ S2 y9 L1 J
7 { e2 P: ^0 n【 NO.1 移除指定数字得到的最大结果】: W3 l4 J# T3 |1 _' `; p2 M* Q- o" z) E+ A& d
解题思路+ ? ^: V9 r' q2 ?- p0 d+ e0 @
$ K* ?3 V, ?. W' d+ ?" H# X( B
可以使用 BigInteger 来比较大小。% `; C; i- U8 N0 v2 D- B( d
: k8 f2 D: S$ I( q; I7 D
代码展示) P0 @) x. _! S
: C1 D' K; i# L+ y2 z
. c3 h5 W- f9 J* G8 s5 t/ a9 K! q- F# x2 ^1 _: |" K# l$ H x, O% ^
【 NO.2 必须拿起的最小连续卡牌数】7 s, p$ a: N( U- z5 \# b6 Z
- R0 V1 S8 U" R. \2 z解题思路2 l3 {! {6 b9 l0 S9 j
7 c, f4 x: a6 h. { L
题意即求相距最近的两个等值元素的距离,遍历一次,记录每个值上一次出现的位置即可。/ R/ J. b7 } W; c! W- w
" a' R" }. D0 P8 _5 M& s6 W; m代码展示8 z2 [7 ]# k7 F! C4 l4 y
4 m6 V+ m6 V7 _% O1 Z# _
6 A/ N; @' {3 ?$ b$ k) {5 Q. @9 b, }. a! Y6 x3 e
【 NO.3 含最多 K 个可整除元素的子数组】- ^. A, e& g, s* s
7 f7 i- ]1 }- X2 ?9 L
解题思路
+ Q. j9 F/ U7 B1 e" `) V# R/ \& U
% r: S _/ O8 F1 o6 V( h1 d& b6 b4 Y定义一个 SubSeq 类,实现如下几个方法即可用 HashSet 统计数量。
% D j$ t1 M' X! Z) W6 i/ D9 y! `# E2 T# V, V2 R
hashCode 计算哈希值, y; T1 X* v6 f5 f, e" X; ~
check 检查是否满足最多有 k 个能被 p 整除的元素
$ i; A6 Z$ h7 ~1 @1 lequals 检查是否相等8 z; {9 \# ]& t) M# z' i
& Y, R" N1 x }/ D" D# q代码展示
& D4 z% t/ p5 K) [2 @
) n- k" x& N6 U; ]: g5 K5 w9 q
% q; s( }* o6 ]6 d0 w L+ e* Q【 NO.4 字符串的总引力】
: i6 C; o' e' u% a
+ _! u" Q" S+ S2 J" z# o$ S解题思路
' ?' ]8 `% v* O( U- r5 U% ]6 ]$ g# ^, Y% [7 z
定义 f 表示以第 i 个字符结尾的子串的引力总和,再定义 pos 表示字符 i 上一次出现的位置。2 @9 F- P8 _- }- n) e
# w& U! R* M- {" w则有 f = f[i - 1] + (i - 1 - pos[charAt[i - 1]])7 M6 L; ?& ^' N6 P8 J
$ M& j1 s8 N+ v, R# {因为以 i 结尾的子串中,pos[charAt[i - 1]] + 1 到 i 之间的子串都会多出一个字符 charAt[i - 1],而其他的子串的总引力与以 i - 1 结尾的子串的总引力相等。
' g: r1 F$ A' p# {# c$ w& R$ C" E. H/ c* ^5 F" c+ L0 l% h
代码展示
7 }0 ]1 q* h6 ~6 [! Y$ p& y( V+ t
7 g+ D d. C- T: W" |5 W+ Q |