登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出数组中的第一个回文字符串】. J9 e K# t( q
0 R4 [) @' ]6 w) a9 Y& |1 A
解题思路2 L0 R m" v/ Z, R
签到题,遍历一次即可。: o/ T/ D7 P* H2 v
1 i# O- l ?/ A7 |1 Z代码展示
# U2 D$ P$ d3 b- f: Z
/ X$ ^1 J- }" Q0 z+ L x: l* xclass Solution {# J; P: }& r3 E3 k( L3 T' S
public String firstPalindrome(String[] words) {
3 J/ a8 P& y5 v" I6 b- Q% v7 \& m for (var w : words) {
# p9 |) S! z% j$ z( Y& _ boolean found = true;9 T: Z* }6 I& q0 U {: e) I
for (int i = 0, j = w.length() - 1; i < j; i++, j--) {
; o6 T# _ _8 L& g) J if (w.charAt(i) != w.charAt(j)) {
- l2 t4 S1 h0 h found = false;
+ w& E* a1 d; D break;9 N- P: j( x8 }$ u% [' M4 {
} _) U6 Y Q0 ?* w( _3 M) i
}
" f/ V1 F* w& J* b9 X l$ c9 d if (found) {
- ?/ B9 G0 K6 } return w;
3 `4 ?% U+ Z8 l }
- [2 G' l" H7 U- L) d }
! n8 M7 w4 k2 O. F4 y2 a, z/ E; y return "";
1 b3 r, k( Z0 X7 g: O0 q/ B }
, t2 m+ j0 N: I}/ m2 @7 P' u' ?, j1 P' V( q
4 H$ V5 B2 \; k7 H
6 x1 i4 ]* b* Q( p
【 NO.2 向字符串添加空格】
0 S" w9 t8 k B6 L4 Z4 L/ e& j
: |* R! K3 u% Q, r& G+ z8 x解题思路- `' d* u3 T& d; L
使用一个 StringBuilder 维护新的字符串。
0 X8 h" T; r/ |+ h# q# h# l/ ~' L2 r4 a n# R. d6 ~9 f: a
代码展示) @% S4 Q' ^" f. l. |/ U
' ]7 ?% c; G- k" {: zclass Solution {
7 L( O, P# F0 R; ]+ T$ I public String addSpaces(String s, int[] spaces) {
# w8 J: I0 [4 t' K StringBuilder sb = new StringBuilder();2 Q' |" b3 O& ]- H+ f1 G) c3 r
int sp = 0;" p' z- `3 f/ C: `$ `5 P
for (int i = 0; i < s.length(); i++) {
3 O$ }7 i2 I m& W9 x( A if (sp < spaces.length && i == spaces[sp]) {
{3 x* J" T/ i+ ?- M- L" E sp++;* V f3 e$ c3 E% @( ]- A) |8 e# i
sb.append(' ');& }: j7 H0 y! ]3 Y" ?
}
H& C; h4 B' a! H# Y% @ sb.append(s.charAt(i));6 B! r i+ \0 M7 w& `
}2 p1 g1 a8 L( _' Z9 L
return sb.toString();
% q5 Q+ a4 Z) Z; W }
6 P& r) N; c9 e' q5 n* y+ U}
% j, W) v1 S% D9 j/ {% @# F2 ~; v* v: l; e
/ L. S, U: T( w5 k5 a8 f. y; E5 S
【 NO.3 向字符串添加空格】
" J6 j( T; }' ?9 T" J2 @; `- o4 U/ Y8 F5 G$ P( {
解题思路6 L* \ s! O3 Y' J7 f
双指针。
' @$ N u( s0 I( h" U, l7 n
; m; x5 E5 O0 A0 X2 l代码展示. @7 r4 E9 ^4 ~ @! j% D
! ]5 E2 x1 B+ @) W. m' b- _class Solution {
/ X+ k; E5 t# ?! V& K3 ?) x public long getDescentPeriods(int[] prices) {. Q: Y( j2 @( k& m$ R2 T) _
long result = 0;& Z* Y! j; A$ F# T
for (int i = 0, j = 0; i < prices.length; i++) {; ^; @% C3 i' a2 e- o8 l6 `
if (i > 0 && prices[i] != prices[i - 1] - 1) {8 F# B8 M8 Z' A" Y
j = i;
4 A, A- P1 c0 i5 q% P }
" [2 {2 T6 `! M // [j, i] 是一个平滑下跌阶段4 _# s# m* a* A% Y9 V5 U, ^1 l
result += i - j + 1;1 R8 i+ s0 y3 k) j3 s0 w
}5 q: X) @' x% V
return result;
. r: @( T, [* W3 U# ^ }8 u @4 m/ S$ ?* T/ V) N
}
% z9 V j* f2 ?8 D7 L9 V" I: _: b: \
6 g! ^7 v) x- a【 NO.4 使数组 K 递增的最少操作次数】
) q0 `5 w1 d# s: o* {% z+ K& v/ u5 E. l' N K' E2 y( v
解题思路- Z( f* \3 N/ o; @' s: [
原数组可以拆分成 K 个子数组,这 K 个子数组之间互不影响。+ k2 G" h0 B8 J8 K4 _: G) J$ L
' g9 s2 V, b% k0 g/ {然后问题就变成了使一个数组变成递增的至少要改变几个元素,直接求最长递增子序列即可,使用 nlogn 的算法。9 ], ]7 w8 E8 w' }
6 e ?0 X" F# w4 A- |- @
代码展示
" ]0 w, K ^" U, K) G
: N' c+ y( f0 {. S. ]9 K* wclass Solution {
- C1 [) N, l# R- l/ r& q public int kIncreasing(int[] arr, int k) {
6 ?0 t* S; R. O- t- o$ M int result = 0;
$ f: R L; V7 t W; l+ Q for (int i = 0; i < k; i++) {3 @ y* \' ^, V& I7 t, Z
List<Integer> list = new ArrayList<>();
4 L5 j* [$ w4 C: `$ z for (int j = i; j < arr.length; j += k) {
. @* d. H6 j; U% |2 |! V; k" f list.add(arr[j]);6 x$ l+ \& D( _" v
}7 b, Z1 k% V; U4 N
result += increasing(list);6 ^$ f$ B3 u* ]# v/ k+ {
}
7 \& |/ {# H% s N: D9 t; b# I D return result;, L, o( {4 i, E. B$ a$ \3 c
}
# I5 [, b7 K" S- c) k1 b3 ^$ {, O" b6 |! C$ Q
private int increasing(List<Integer> nums) {: O. c s' d3 q) e; g
// 将 nums 变成递增! m3 @/ p0 l8 l
// nlogn 求 LIS
/ v8 w0 E/ I' R0 C int[] dp = new int[nums.size()];0 R$ C* ]2 ~* q! p7 C' r7 Z7 a
int len = 0;
1 K; o% g7 e6 W1 i# w2 s M$ I for (int num : nums) {8 r; O. a9 \8 G# `; j
int l = 0, r = len;
5 S$ u* L3 h. \7 a3 F# n1 U while (l < r) {
! S' V( {' j; O int mid = (l + r) / 2;! N; \$ d/ R1 |. T. c9 w! \
if (dp[mid] <= num) { // 非严格递增,等于也可% K. m) U3 F$ H* G1 ]* U
l = mid + 1;
& r* E. p& R x# W1 ?% X } else {8 y2 A2 K2 n. }& v7 V1 b ?
r = mid;
$ |7 i! Z' ?' x2 I! z0 U }- o; B" X8 a3 O( Y1 n+ g8 m
}6 Z- j Y; F4 B5 ~2 f- V
if (r >= len) {
. w/ e& `# C' G# Z len++;
! u9 a) S5 V" a4 N$ _& b5 K' p0 b }
0 i- {+ v# X2 E1 Z1 N$ q/ ` dp[r] = num;
/ V& g% x x% C i* Q- h! e# H' j }
, { I4 k, c. S' f$ `7 x$ q. O7 ~
# N- u. z; w \7 }8 [! U8 C4 ~ return nums.size() - len;2 ^/ F" [: L5 b; `# h
}
- t5 U: }8 G1 U1 F- s& W/ d# L} |