登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出数组中的第一个回文字符串】& ~+ l- X1 p/ T! M0 @5 d
5 N1 C$ I0 K, S. n& m' ?
解题思路
9 X4 T+ T2 M& ]签到题,遍历一次即可。0 f# L2 w2 ]6 ?0 ?) z N* `
4 i7 l2 O2 }) k
代码展示 s: q- b1 l% L( b+ O$ P' n
' D$ d: z% w0 d! x
class Solution {# d/ _/ G# C# A
public String firstPalindrome(String[] words) {
4 y2 i! p1 w& R3 A for (var w : words) {
- @; ]' P% X; b- P boolean found = true;! L+ H& Q# r! @# y2 |
for (int i = 0, j = w.length() - 1; i < j; i++, j--) {2 b8 N, |- H4 \
if (w.charAt(i) != w.charAt(j)) {
* P& \; x3 c, V9 C found = false;
' z- ~* }5 S d; `, U/ ~5 Q0 T break;: y. y6 n, P) F# X2 i. Q0 t
}4 S8 L* o$ L, P9 K1 B: g+ R5 ?
}3 [# n7 y9 L3 S( ]# ]
if (found) {0 t5 `$ ?# M8 ]) D) O% h7 H! @
return w;- h4 O. h' L" E0 Z1 @! } y
}
4 U9 V! Q# ~# J3 ~ }6 g( }8 t1 h1 T0 D! O9 \' z
return "";$ M1 e2 |3 } s6 U0 \5 c/ G
}1 ]% V2 k! m% a% ]( |) K: ?& h
}
+ {3 y9 l t$ U% o0 K" n# p7 W: ^
3 K4 z4 h7 H. v! `5 v; k
. V4 U, C! \* h& W/ |; F【 NO.2 向字符串添加空格】5 [2 d' V$ R V! w1 e
: s* w A0 O2 v) c解题思路: p0 H* t2 V# K0 S
使用一个 StringBuilder 维护新的字符串。8 V3 L0 T! J4 ^! J6 E g
" E0 \6 |: z5 {: G代码展示6 \- }* }8 P% {$ V) d7 R2 t5 J! [" i
6 m8 x2 l" i) e' Uclass Solution {
, F! f. `' M& n% O3 H public String addSpaces(String s, int[] spaces) {+ n6 \3 Z- ?1 f& Z2 Y$ l" Y
StringBuilder sb = new StringBuilder();2 [9 H' f1 ^( p6 J* g
int sp = 0;
' o5 u, k/ s2 I8 t6 A- @ for (int i = 0; i < s.length(); i++) {' t# a7 f& _3 p3 @
if (sp < spaces.length && i == spaces[sp]) {
, z/ R! p- M& M0 |! q$ E4 k sp++;
) J. E% `& F4 d: Q) l7 r# O4 v) R4 r sb.append(' ');
3 H5 g6 e. \$ G( ~: P }
3 |% X* w+ ?6 b$ {& o/ Q6 |, t4 y, ? sb.append(s.charAt(i));7 d: X( ]/ S3 p; V8 _/ j
}
( z `4 j- j9 ^. }$ S; ? return sb.toString();' |, P6 B5 u3 S( W4 }) o$ _
}: _1 g$ I3 z( g- e
}& ~% m4 X! x. s
' w( A7 }( ?# H
+ C9 {% N# B; a# O, x
【 NO.3 向字符串添加空格】
& V# m, S/ H2 |% i5 g
: f9 j) Q. d" [6 Q8 o2 ~解题思路6 V2 |# K* u9 X2 Y
双指针。
! e+ [* }; W* k9 \5 e
I4 c6 |4 q& B! i* ?# _+ ]6 P$ A代码展示
4 o* h2 O2 Q* R$ M; R. ^, H
4 _' Q3 a) C' N3 lclass Solution {
' K0 k! }8 F* I* V. W, z: ? public long getDescentPeriods(int[] prices) {
7 P) g# ^. Q' c' P# F8 R long result = 0;1 [; Y. R$ X5 R- ]: Q8 q
for (int i = 0, j = 0; i < prices.length; i++) {9 }% r8 ]. Q; y) b+ r7 P4 Z, `2 [
if (i > 0 && prices[i] != prices[i - 1] - 1) {
9 k; s" C# y9 \* V) P) Y6 [% c8 @ j = i;/ M7 h' a, M. v- u, `7 ]; `
}0 j/ i( v: _) E/ u. [9 V5 I) i% D% _
// [j, i] 是一个平滑下跌阶段- C& ?9 }2 i; o8 j- {& k9 w' m, _" G
result += i - j + 1;6 ]7 k6 T3 A2 b( R
}1 w/ M, E: @6 s, |. x x
return result;) A% O9 p0 N' M* X0 t
}
) G3 X: z; \( Y! L+ U5 ~}- D# V: u" Y5 d1 m
8 e3 ?% A, X. l5 U e
5 A* W& }4 `9 K* p$ _, w【 NO.4 使数组 K 递增的最少操作次数】
: g) d7 n3 Q+ R' n5 |6 _0 H# c
/ ?. U% X1 \) D3 ^ [3 S解题思路
9 |3 H6 ~ F) i& c原数组可以拆分成 K 个子数组,这 K 个子数组之间互不影响。" d+ Y j; A( A4 J4 a3 z2 E$ d
4 L& O/ h: W. `然后问题就变成了使一个数组变成递增的至少要改变几个元素,直接求最长递增子序列即可,使用 nlogn 的算法。" d c. y. u# e3 P, I! u0 G
4 y8 m4 z: V: g! R# _2 |
代码展示
L6 f- v2 E& ?1 B2 l9 m9 ~5 @2 p O. [( G
class Solution {! Y2 y8 E$ Y+ ]4 S8 e
public int kIncreasing(int[] arr, int k) {$ u; r" n) u3 N- c! u) t. O. \ q
int result = 0;- S5 M4 c3 [8 |! D' \, k3 H1 Y
for (int i = 0; i < k; i++) {4 r# ~. F B4 S8 |+ @5 j
List<Integer> list = new ArrayList<>();4 W# x) j2 F. F& W; G& |& @0 ` ?
for (int j = i; j < arr.length; j += k) {( h/ w+ m4 }5 U; q& L
list.add(arr[j]);
) a: K, Q* C c8 Q3 U% U* _ }
" }( C4 x# X1 V0 t" m5 q9 H result += increasing(list);
$ D, O% H" d ]( o" j2 y0 `3 f }( d3 s0 x+ K3 ^/ e% ^) l
return result;* k. g7 ^; {4 g
}- E8 }, \& k! u+ @8 d
/ P& `2 K8 k' K private int increasing(List<Integer> nums) {
, t, ]; L" Z' ]9 R! A // 将 nums 变成递增
- r1 e4 f0 @# R. O // nlogn 求 LIS
5 \& M1 s' o$ M int[] dp = new int[nums.size()];
4 d/ S/ Q1 q; v int len = 0;
|" k8 U: j9 q1 p& z2 N for (int num : nums) {( H' r5 U% I! q: ]9 [8 o6 v
int l = 0, r = len;2 r/ X- Z& e4 Z2 Z3 b& R
while (l < r) {) g R1 C) ^" B/ g, Q
int mid = (l + r) / 2;
; r' ]4 F- {5 e% q$ s if (dp[mid] <= num) { // 非严格递增,等于也可$ `6 _. b! M, h# u+ i
l = mid + 1;
x4 F% m' @, r' R& X } else {
1 K/ a0 \4 b4 F r = mid;$ K. h% @" ?; B: K4 t7 C
}% G. r. }$ {: f5 {) L
}% Z8 @ C+ ^* W2 z
if (r >= len) { f9 Z k, _, l: o/ I) I6 c
len++;, r, q w, N6 j
}
9 p% b/ v& l8 |* o' y2 k dp[r] = num;
6 h2 v. F6 l1 k3 P6 k% i' e f }/ [$ g9 U3 |6 S/ U8 M
: M( h$ Q* [8 f
return nums.size() - len;
( n. [% D$ T' Y8 n& I) L }! a: u$ L/ [/ z; _7 {
} |