登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出数组中的第一个回文字符串】7 r _" t% S E& ~8 n6 b
3 @7 D. e: F9 R解题思路
: q% c/ {: f, P; X签到题,遍历一次即可。; B0 |4 J t& N2 M2 m6 @7 K/ w# u
, k. b2 k H2 Q3 M6 b0 C
代码展示 _( z- `" a# o8 {! c/ C- Z: Y
8 p0 X0 c. Y5 m) S7 G, E
class Solution {
5 G3 z$ y% Y/ n+ R' V$ `1 S$ L public String firstPalindrome(String[] words) {# U- R+ a8 o2 X2 Y. a
for (var w : words) {
4 M" l$ U3 ~, S% h2 h0 n8 F boolean found = true;
1 N6 g/ A7 n9 I# ~# q for (int i = 0, j = w.length() - 1; i < j; i++, j--) {
2 B4 l0 p9 l) g$ k4 D4 ^# @9 v if (w.charAt(i) != w.charAt(j)) {. F- L6 S6 j" ~6 X
found = false;1 e p! E( A3 d" i' t
break;0 }, m3 K! w X& x6 j# E
}
) t- ]3 K; m" z' p3 f; h }, j5 L! `7 {9 B+ j2 s7 e' ~' u
if (found) {2 a! ?3 d( f" Q- {- i4 G/ k* f
return w;& B5 a* a! m* E) C0 B( l& H3 w3 M
}& b3 T" _( u2 C( \' P( L# R# f
}
5 b* V+ d2 p3 _& I% ^ return "";6 d3 K! q$ S3 t% d& N/ {
}, N. q) k v0 r% B
}! n/ w, [. f, N2 }, D# a5 m
8 G: ]/ I- t2 g0 o9 N. \
0 V2 p4 r9 w4 g1 E e: Y6 {【 NO.2 向字符串添加空格】6 g: y9 L% D5 _' y. `2 F; a
k" X, d& ]# `) o9 I5 k
解题思路* B v8 W! a% r+ q( K% y
使用一个 StringBuilder 维护新的字符串。. U7 o B( @ K. q9 G
# J1 l" r& q* Q代码展示
! v4 g8 K4 b I) \. w% |6 Q7 }
& w4 L4 \/ ^3 r5 R2 q# cclass Solution {
8 d+ v; Q/ R: l' r/ H6 I public String addSpaces(String s, int[] spaces) {4 s( o& B" A, U4 |, `+ O
StringBuilder sb = new StringBuilder();/ j8 i+ W/ _, c
int sp = 0;# I0 l9 O! c* k9 X
for (int i = 0; i < s.length(); i++) {
' `; K1 u, D/ B; \ if (sp < spaces.length && i == spaces[sp]) {9 n5 H% y! L1 ^
sp++;3 Z. r' _& G4 f8 P
sb.append(' ');
4 [+ l3 L/ m1 Z# Y }
- E O$ w" ?! [- L. U3 Y sb.append(s.charAt(i));9 \& q j' d) t- y8 Q1 a
}
5 Z) R( p3 D+ R5 O! B return sb.toString();4 u; d. G- Y% C( u I7 c
}% R' y* V |& _0 ?8 ?" G1 {6 }
}) y* A7 G" s% O6 T
6 }% D* |3 E9 k, P$ d
8 x1 o/ {' F1 l6 Z【 NO.3 向字符串添加空格】; v) f1 x7 c# J# M, i' F; M
v- ^ L" P3 m% U' G解题思路* q# P& U/ d$ Q8 w) O
双指针。
, L9 F) s" ` X9 l6 m) W4 y, i- v
代码展示
# |5 m. s7 W% m- u
) @1 S) {" A% p9 [) Fclass Solution {5 e& y6 X2 [7 X4 p- \
public long getDescentPeriods(int[] prices) {$ }6 I9 [: V: ^* C/ B! J+ U
long result = 0;* p0 `" N& ^* ?' D( E
for (int i = 0, j = 0; i < prices.length; i++) {
3 I2 l( @1 C, s if (i > 0 && prices[i] != prices[i - 1] - 1) {; P r, L6 g( \2 S( W
j = i;/ G+ ~0 P% e+ G% P! j. J+ |
}! f- |2 U+ C4 Y- d8 p9 m
// [j, i] 是一个平滑下跌阶段& s0 _1 w& S0 D- ]% t! Z% V+ l6 E0 R
result += i - j + 1;
2 b* W8 B9 N$ Q1 I4 \: j! ~ }
# S \3 Q2 ]. Y% U, r8 _& B7 ^2 V return result;5 f* B3 `0 u% V: S$ D
}4 O$ O- |+ H! N( g- Q
}
4 V2 }, f+ _- P. p/ R
$ F) r" k, | D% i2 D/ F
2 e" ~4 g; x5 y% E4 U【 NO.4 使数组 K 递增的最少操作次数】 _% r2 r3 b* d- y# U. D
% N: ^* q. E/ y& G8 R0 ~解题思路
0 t% G2 c7 v9 r% x; Z+ z( a/ U原数组可以拆分成 K 个子数组,这 K 个子数组之间互不影响。
! }/ y2 B w3 K `% W0 B( l; y% ]) ]
+ e, C& j2 G2 ^9 i然后问题就变成了使一个数组变成递增的至少要改变几个元素,直接求最长递增子序列即可,使用 nlogn 的算法。$ z% b a, A; `; T
@% M' C; H+ K; ^# ^& E- {代码展示/ o, l. e- U% t4 i& x. @$ t8 i
0 L7 q8 D9 M* {8 Z3 i2 \class Solution {0 _2 |& h& |; T6 P7 O2 x0 n- W5 q
public int kIncreasing(int[] arr, int k) {/ o& _2 M. c: A9 O$ |+ `7 g/ T
int result = 0;9 | a8 ?! b {+ f
for (int i = 0; i < k; i++) {6 E8 \2 I6 [0 Y+ k4 }# @6 k* {
List<Integer> list = new ArrayList<>();
1 s3 [: f- G3 D) f for (int j = i; j < arr.length; j += k) {
' g$ E) Z5 `0 A" i7 O* n2 B list.add(arr[j]);+ C2 }2 K$ V1 g; ^9 _; D/ C* b( o# l
}
8 [& Z3 @5 |$ k# d* ~. x result += increasing(list);
. j6 v- k5 E4 ?; p$ B }
5 Q% q2 [, g, V return result;
7 n) [- d9 v% v: r _+ f7 ~ }
# a9 e) `) ?! p% o% B' D) b6 {
6 k7 k+ J, G8 E$ x# _2 N private int increasing(List<Integer> nums) {
$ Z _, M$ \$ I) ~ // 将 nums 变成递增: n- \9 `5 a0 [0 y
// nlogn 求 LIS
* {7 b" E* f# r2 N0 x9 }0 k$ ^ int[] dp = new int[nums.size()];
! A) \( y9 j9 R% a6 q int len = 0;2 L$ e0 F- K) n( z
for (int num : nums) {
, B% J/ q" H6 S int l = 0, r = len;
& @7 j w, |, i while (l < r) {
" v2 ~" U" w% T$ U, ]9 k int mid = (l + r) / 2;! ?6 h* H. K0 L% W% y: R. V
if (dp[mid] <= num) { // 非严格递增,等于也可0 k! h$ A0 w! ?, B( E" Z& Z
l = mid + 1;
* i" a7 P/ C$ S" z7 M } else {
' Y! a6 z4 A+ I0 H" A) d r = mid;, A$ c2 A3 C' P* |0 M' Y9 T& [
}' m% g% n* e* u# m7 J
}
" {5 c! ?& p8 A2 v9 ~+ B; T# ^. f if (r >= len) {* n0 c) [. {7 n+ I6 K
len++;- i. [. V# k9 n
}
( ], I; D, a- w, L dp[r] = num;) |) k! c H. q3 k' r' l! Z6 p
}
% P U8 ~. C+ a8 R9 _& C# U% I$ A" l" V7 E! N- T+ a
return nums.size() - len;. h4 ]+ f8 X4 n% H( @
}
' ]5 x+ e$ w J4 f; t' x} |