登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出数组中的第一个回文字符串】' i$ x3 i5 k1 O/ \, {
; |2 W+ a% C! _! I3 H4 D8 j
解题思路9 j' }8 G8 j1 H4 \: g' f5 h6 j
签到题,遍历一次即可。9 f( a% _1 e) N- d+ U" ~. M. ~- W
) w/ v; j, F8 j, b/ A
代码展示
1 l+ a8 J" X8 T/ U6 ]4 G* y" t* W1 ~2 v9 ~' \: u! r3 ]. {
class Solution {+ G8 ?3 }$ `8 {2 a; e
public String firstPalindrome(String[] words) {% x0 _* l5 C8 p w) G3 \" r7 l8 c8 D
for (var w : words) {. Q/ s, l/ F- N+ `5 f- B' l7 g
boolean found = true;' k1 A* Z! ~3 M k$ d! `/ p
for (int i = 0, j = w.length() - 1; i < j; i++, j--) {* A6 J4 \2 C9 q2 y. {
if (w.charAt(i) != w.charAt(j)) {$ p4 o; _8 x% m; Q
found = false;
! }7 f4 _: l* W9 N6 m# c" F break;5 `8 V+ d* `# R8 K
}) R' o/ Z) O. B7 t( T7 ?7 s2 K! M, X
}
+ }! }6 I2 N, d4 s+ l if (found) {
+ H: G3 @ ~8 p& ]( d) ~0 ?6 W; R return w;3 G! c8 P @) ^6 X% t
}8 d3 q2 L9 D$ Q$ o1 @" Z; j- E/ w
}
9 f- q+ ?1 [! P6 x- n- C4 b) I9 D return "";2 g" c( t$ K: w4 ^
}
2 C; q; @3 \6 k9 S3 {) f}
6 z) ^( O9 h; B" w1 C, x2 |5 z2 F0 L& A) I5 ~
8 F2 b4 Q" A# z6 A$ s+ D【 NO.2 向字符串添加空格】
; |; c R4 e+ Q; c/ ?
( P6 M9 D+ K; ]9 ^% R+ r解题思路
2 ~& A! T( Q U! q4 H& u+ t4 R# T使用一个 StringBuilder 维护新的字符串。
6 {* N# p! G1 E4 G' Y' d5 z1 s1 @! m
' ?7 i4 p; y" {, T8 R8 n" G& w0 [, x; \代码展示
0 K/ h- r8 Y9 k ^# o
- }1 a& e2 I/ W* |; Uclass Solution {
& }! l6 D3 S7 B$ p$ I public String addSpaces(String s, int[] spaces) {8 Z9 U- D4 ?- a3 d4 D
StringBuilder sb = new StringBuilder();* {, A$ \$ G* N
int sp = 0;# r0 }6 a! C6 c% E
for (int i = 0; i < s.length(); i++) {* W) P6 L. D) N2 b6 c
if (sp < spaces.length && i == spaces[sp]) {+ \' i5 n3 w- L: n
sp++;; A I# K. T9 N$ s
sb.append(' ');4 y D8 d2 P' ~: ?4 n; ^' m! F2 \* u
}3 _# A+ F, `6 X& l2 v& T
sb.append(s.charAt(i));0 \; Z: \; h% Y& x2 P6 ~: e$ e! x0 N5 t
}
. |5 k0 Q# E* T! g return sb.toString();8 m+ M9 Q% j1 {: w( @
}5 l8 ~; @( p$ V7 F3 X+ e
}
" k7 i7 B8 H2 X& @4 h/ l {# y* w3 X3 l8 N* V R
* k+ |! o$ e, c: r4 q* l
【 NO.3 向字符串添加空格】# j3 V+ J+ J" x G
w" N: S8 _! n$ r1 T解题思路
6 C7 F7 b2 [, T8 ~双指针。
0 c, ~; I# n5 K4 S; Q# d/ H; Q
4 O' s6 C3 R0 A代码展示
. v3 ]' J+ N% t2 n- j' x+ f5 _. c6 H; |" x' u6 r7 m
class Solution {: _5 o2 e: Q& ?% E% T
public long getDescentPeriods(int[] prices) {+ _5 t$ s' j D2 r O
long result = 0;
" W Z- j. D. N7 G# s for (int i = 0, j = 0; i < prices.length; i++) {
) E V4 {& U& t+ B if (i > 0 && prices[i] != prices[i - 1] - 1) {
( D' g9 i2 i* ?) m1 M' k- F j = i;0 g2 Z" F' j& r& l2 S; T
}: G. b" q& E: E# S$ u y0 a( E+ g
// [j, i] 是一个平滑下跌阶段" O$ F* Q* M( t. t
result += i - j + 1;' G8 m* w! f/ G* y
}: g* G5 W& i% V7 g- X, o
return result;0 N* O! @1 q- u8 C5 n
}' Q" X& z: n& O. ?! K
}
1 C' k9 X. t9 V% v0 G
/ u7 ` v8 j" ]. p% i$ H- Z* y$ z+ g$ ~
【 NO.4 使数组 K 递增的最少操作次数】
9 ]# }8 B# j6 T% a0 ~
, S+ F; s1 }) o: W) t& V- [解题思路8 X( u8 x9 _: b6 i4 J& |9 U* b( d1 a
原数组可以拆分成 K 个子数组,这 K 个子数组之间互不影响。; u# z) i3 ^2 s4 ]: H
: Y0 v8 ~8 `) M7 I3 t6 m然后问题就变成了使一个数组变成递增的至少要改变几个元素,直接求最长递增子序列即可,使用 nlogn 的算法。8 H/ s, c1 z. w2 B+ Y, r6 ^# R
! M1 L+ a& n5 {- A" [; E+ @- F3 |
代码展示; [0 H0 a3 G$ ]: T* z3 @
' R. m7 W6 a2 r4 ^- V! @$ P, d
class Solution {
/ } V! U+ s5 Q6 u/ | public int kIncreasing(int[] arr, int k) {
& i- F8 F+ D3 ]0 X int result = 0;' J* O- a+ k+ m5 u) O
for (int i = 0; i < k; i++) {
: I2 b, l6 j: I6 z0 \: e List<Integer> list = new ArrayList<>();
W6 b8 ?% g& B" c for (int j = i; j < arr.length; j += k) {
# e1 B% x/ {# n" ^ O list.add(arr[j]);# Y7 W: y" G {/ ^7 D) {
} T; P0 ?2 o$ A
result += increasing(list);# J& q% Z& C% l& F+ z2 y7 E: p
}) P$ j; D( g" R
return result;, J0 x6 U6 ~0 o: H6 K4 X3 R
}
1 m( y' t, z. q1 C; v+ n2 M7 I
% r; X0 C s* v8 @2 [5 x private int increasing(List<Integer> nums) {
, A4 Z4 F) O1 W/ M4 v& D // 将 nums 变成递增
, A0 I; p! i& e% r' o1 Z // nlogn 求 LIS
- p o2 L4 k0 I& g6 N8 T/ g int[] dp = new int[nums.size()];
2 C1 a8 ~/ N: U$ [. z0 l int len = 0;& @: H8 e- x, y
for (int num : nums) {, ~! X& P8 R1 j; d: h! I
int l = 0, r = len;3 e7 c" e: ]1 `/ V( }0 }7 a
while (l < r) {
7 c- I) U$ l7 P5 O4 J9 O w' c int mid = (l + r) / 2; t7 l" a5 F# H2 m/ t4 G
if (dp[mid] <= num) { // 非严格递增,等于也可; L- G1 ^1 I1 [+ Y3 k: \
l = mid + 1;8 @6 |) ~0 a* ^
} else {% s; j6 @+ |! \- K
r = mid;
( h* a4 e$ `2 e- r7 }0 l$ c i+ h }$ o2 a; `! H# l, N/ |
}
|# Y! X( o- M7 `# N7 c w if (r >= len) {% w( W# \0 i; j2 m+ p- F8 y
len++;
6 F ?* U4 Y' O4 L2 }% d. w% U4 T& S }- g: {+ z. m; O4 m2 }: v: G
dp[r] = num;3 t# F; @% }0 I! F8 T" ]
}
' v# l' V. ~$ w; G) S8 d% R7 W# W8 c, B7 a, o5 Q
return nums.size() - len;% h1 I; ?0 _5 J% ~! E
}. Z: Y9 e# }# y$ I- c2 k7 O6 p/ _
} |