登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出数组中的第一个回文字符串】
( m+ P! }0 F0 C7 |7 y
2 C5 l3 n0 f5 d4 D8 B解题思路. S; {* ~/ f& `6 l5 ?7 s
签到题,遍历一次即可。% U _. `, h$ Y+ a1 \! s* d
6 b0 h5 x; l p, M代码展示1 D& ?$ R4 W+ k+ }
- H) X' S; U) d9 U/ H2 ^7 s+ F! tclass Solution {
n7 p# Q- l( X public String firstPalindrome(String[] words) {9 [/ v) m0 w+ A9 D
for (var w : words) {
0 o, M0 P: u6 Z boolean found = true;
4 Y: V7 v# A+ M+ B' `' a6 A for (int i = 0, j = w.length() - 1; i < j; i++, j--) {. q9 s, ~6 j: h" C
if (w.charAt(i) != w.charAt(j)) {. N4 C* c% P. h
found = false;. K3 i" J. g) Q2 n9 \. _
break;) t7 P d @0 x' n" K. Z
}
7 H( l/ A# G( _6 t9 G* ^ }
4 j3 ^) S9 K1 z if (found) {
9 a9 G3 h, O2 P+ n$ x9 i0 T- ?+ } return w;
4 O* z7 C- \. j" J* U }
' l, o! B! p9 S }6 c& {! y% F0 c2 K
return "";( I6 T/ W1 X2 p, R/ a" Z& g
}
: o% @& \0 \4 m3 u" `% ]}
) B9 j i8 W4 ^/ T
5 | W& E) [: | p+ V8 I6 o; {8 `3 y, i' F$ }' x
【 NO.2 向字符串添加空格】
7 e6 G% S' m$ { c/ Q
$ h& i, x5 a$ ~% J$ @# v解题思路
$ Q1 z+ [1 s5 M使用一个 StringBuilder 维护新的字符串。
9 z) I2 Z# |1 A0 l* n% ^2 i' G. q/ S% k W# Z9 V, _, L! d" n# I
代码展示
0 K% K) N9 S( S; D4 ^/ X
- S( V8 W0 K. o' f$ p; n, aclass Solution {$ P( w1 u+ H- u* V& G$ H
public String addSpaces(String s, int[] spaces) {
' O* X1 y; R: @! G# q StringBuilder sb = new StringBuilder();. L+ Y; }2 E/ Q2 S
int sp = 0;
3 @ \6 r8 A: _' |( ] for (int i = 0; i < s.length(); i++) {7 L$ Y0 i' R2 {" C
if (sp < spaces.length && i == spaces[sp]) {& Y, J0 O. [7 F# c* V
sp++;
# n& P' O% R& U sb.append(' ');/ q1 k+ X) ]) `, w7 G9 ]/ D
}
. \, P& F/ M! r2 |4 u sb.append(s.charAt(i));
1 w9 ]+ O$ l+ c3 e1 A7 E$ y }2 u; v& \) b% A3 Y1 d' y
return sb.toString();2 K s. U" e+ Q. O) v, _. y: |0 C2 h
}" ~0 S2 I; v+ u7 y
}
* y; ], t( `& q) X& F$ Z4 x
& T1 P4 p- L, g+ U3 f
" h& Y2 c. Y9 C7 }1 }1 W5 i【 NO.3 向字符串添加空格】
9 h) N" a0 v0 @8 j' r9 q0 k0 O( n( i
解题思路
* S+ U" z& ]# x; m; Z" j' X. U9 E双指针。
3 P3 K7 {+ q, V/ w0 k! X8 i" \7 e6 q* ?. [! F8 i4 N7 H: G
代码展示" _# ^5 {# T* l! K6 b8 y
2 R& H: M" E- N0 F6 b n& m
class Solution {
7 f& G, y+ W. W6 f public long getDescentPeriods(int[] prices) {
; u; H' x- I+ R' ]+ q long result = 0;* L2 m' Q: h. B9 T( ?; l& g
for (int i = 0, j = 0; i < prices.length; i++) {
: v# @/ u: y; p/ I p, J* e if (i > 0 && prices[i] != prices[i - 1] - 1) {- S) b: C3 t% R3 d1 ?" A' U# f Y
j = i;7 m" ? {! l( s. y) v# S( F
}& B x9 o' R9 m' m+ k7 p/ L/ d
// [j, i] 是一个平滑下跌阶段5 I! U7 n( X! K# v9 I
result += i - j + 1;
- g, z v. {$ n( j( K. z7 K) R- D- K; U }
+ v- N& \2 O' d return result;& C9 }' H) C8 f# t/ }
}+ ^& F; e' O; Z c9 F H
}
4 c& n! Y3 Y* M# w- M0 _
6 }' \% g. f0 J: z
5 a. B; r# o: ]# H1 k2 b【 NO.4 使数组 K 递增的最少操作次数】0 _( q v4 n: M, }. r( c
+ n, j, C# {6 I
解题思路
5 {+ U* K3 h1 v/ u& Y# p8 o2 h原数组可以拆分成 K 个子数组,这 K 个子数组之间互不影响。' a9 B; k6 ]+ B* G" y
5 b1 b1 l, p2 X4 S
然后问题就变成了使一个数组变成递增的至少要改变几个元素,直接求最长递增子序列即可,使用 nlogn 的算法。
: _) ]/ Z4 M$ V' b# I" b! r
0 u4 }' `+ o4 j% Z代码展示* h4 t& j0 ? y" u# d0 e
: j, m& i' c* B! Y4 oclass Solution {, D4 e) g( Q# S/ F5 _
public int kIncreasing(int[] arr, int k) {* A7 {# ^1 M! I R
int result = 0;- }$ t; N4 d0 I7 i( u7 T
for (int i = 0; i < k; i++) {2 n8 g& ] b% W& O$ C
List<Integer> list = new ArrayList<>();
$ b9 Z% \) j" o! j6 ~+ ^3 ^3 q for (int j = i; j < arr.length; j += k) {/ v% K+ y- |2 p
list.add(arr[j]);
1 Q- Y$ [8 L) g' t& z# Q( M; n }# ]& T+ e5 Z2 X; W0 Q! }* @
result += increasing(list);$ t" Q- P7 Q9 f7 P
}
; [9 J( N: S# W/ P1 T& ^ M return result;
) X- ^ J2 q* o( ?$ o+ f# X }* X# ?/ u' O6 ?
% U7 s& e: z" W& F
private int increasing(List<Integer> nums) {
, P# M3 ^6 G3 d s. Q // 将 nums 变成递增: |" J& K* E' W7 c8 i+ M* b
// nlogn 求 LIS
5 P$ G* \ l$ P) X int[] dp = new int[nums.size()];
3 L. G& l4 L) u3 z% n) m int len = 0;
+ j4 r' E4 K# l0 _/ p4 v for (int num : nums) {
8 x9 O6 A" s- ?! g- h- _ int l = 0, r = len;+ j2 @' I, p( v5 f9 t
while (l < r) {
5 c" D4 g+ f1 l( } int mid = (l + r) / 2;( K" ]2 \% G5 x$ | {) c+ D# B
if (dp[mid] <= num) { // 非严格递增,等于也可
& a9 ?1 }: D! K8 c' o& `) E l = mid + 1;
! g& o: T; N$ |& p } else {' W% H4 h! O8 {$ \' z6 j- z
r = mid;
4 X' L I, z+ M: q: F5 `: z0 ~ }
' d& \/ U2 Z$ Q2 ?0 }1 y$ `& V3 i( H }
9 @$ K1 V$ v; c% A% B- T/ z \ if (r >= len) {
$ l! w, m+ q9 Y9 N2 X len++;
7 k" ^9 m0 h w1 ` }
; Q1 d& L9 c" U, `8 H dp[r] = num;
/ E6 z# N. x1 N6 m# R7 K7 ` }/ w* h- o; j u( q
- F* J6 L L" S( A$ G return nums.size() - len;' i* B$ j& _) I M# G3 I% G
}
3 }7 D; b& U* Q( [} |