登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
本帖最后由 上岸算法 于 2021-5-25 23:25 编辑 $ |1 C- e! c1 ~9 {2 ]* y
7 }* Y$ C7 j3 M- F7 x9 ONo.1 哪种连续子字符串更长 解题思路 签到题。 代码展示 - class Solution { $ v2 x# V( Q8 Q6 }5 o! W7 L( z
- public boolean checkZeroOnes(String s) {
/ w9 R) H6 j: h5 e: y/ q - return check(s, '1') > check(s, '0'); 8 l# O8 w/ t: z0 ?- s. |
- } 4 M$ z3 o4 Q( |
- # S- T* i4 C. x, I! e
- private int check(String s, char c) { - w3 U. V o" B7 w, z% O3 n" v
- int result = 0, count = 0;
5 \7 |( D$ S3 ?; B" a% f0 W. X# G - for (int i = 0; i < s.length(); i++) {
0 X5 V; v& q6 v2 G - if (s.charAt(i) == c) { ; b7 i6 d2 }. z! l7 L: I0 p
- count++; b3 G3 h+ `( B6 R& w
- result = Math.max(result, count);
" R& R2 A4 {- b4 U- \8 p" R- D - } else { & v, S0 a7 T" ], ~
- count = 0;
; T/ F& h9 n* S" A+ Z K# K& c+ Y - }
. ~8 A9 j. u3 ~) e v - }
8 @/ Y1 U8 G$ t' `. n% S2 N7 o( L - return result; 3 Y q( Q9 M1 V5 W$ R, d! d
- }
! p6 U) s: Y( {: C1 g8 C0 w - }
复制代码
4 I! m/ m2 q' p" l. ?8 U% W秋招将近,华大学长/斯坦福学姐联合组织了一场面向北美2021秋招的算法带刷公益活动。 带刷内容源于Leetcode 原题/近期大厂算法面试真题。 模拟面试+面试技巧分享,备战秋招! 只要你熟练掌握一门计算机语言,比如:java/ python 等,即可免费参与本次刷题活动。 活动时间:2021/6/1-2021/6/25 No.2 准时到达的列车最小时速 解题思路 二分答案。 对于给定车速计算通勤总耗时的时候,建议仅在最后一次运算使用浮点运算,其他均使用整型向上取整的除法。 代码展示 - class Solution {
- O- ], O4 L8 D8 a# b0 ~& P - public int minSpeedOnTime(int[] dist, double hour) {
' Z' ^$ a) \0 b7 ^ - if (!check(dist, hour, (int) (1e7 + 1))) {
: I3 V5 ?# l1 w* S - return -1;
. j& t+ q) X% j - }
+ n. F! A$ {0 Q9 K2 u - int left = 1, right = (int) 1e7; # u$ L* W7 @7 N* C
- while (left + 1 < right) { g+ o, w6 N2 E, M
- int mid = (left + right) / 2; ! O" M2 B5 ?! B8 h7 P, F% u
- if (check(dist, hour, mid)) { ( Y4 _ M2 Q1 G
- right = mid;
% b* L& D- v0 ~! V - } else {
# W3 J0 e+ _2 c/ b - left = mid;
; |: }6 \2 v9 z2 r3 y - }
: a C/ ?% o: D% w. d0 r3 E. h L - } , l; U0 _; G% p8 N6 `3 {( I2 e8 M! U
- return check(dist, hour, left) ? left : right; & N- q6 Y- w) k. w: t3 b2 ~; ?( Y
- }
7 D! P( J* k. {& [+ Q. s" ] - * Q+ d9 J& ~+ K+ G8 o
- private boolean check(int[] dist, double hour, int speed) { 2 e7 l* z. N4 y! Z" a5 H* s2 _) M
- int cost = 0; 4 }3 O. x% {8 w* A0 [1 O/ [
- for (int i = 0; i < dist.length - 1; i++) { . ?: h! @$ F2 M. w- Q3 V5 f
- cost += (dist[i] + speed - 1) / speed; 9 \6 H( k) W, H
- } & h1 N$ k4 w- _) w
- return hour >= (double) cost + (1.0 * dist[dist.length - 1] / speed);
/ j/ k, C4 [ k( ~( F5 H( X - }
( `: s) p" y: i0 P# {7 d. r/ A - }
复制代码
: S/ U6 m! B, j/ d: C4 x: @No.3 跳跃游戏 VII 解题思路 类似于滑动窗口,使用队列维护可以跳跃到当前点的点集合。 代码展示 - class Solution { $ `& v% @2 s% Q1 ]2 z; O! ?
- public boolean canReach(String s, int minJump, int maxJump) {
h7 l- k% z) K3 l9 m* v4 E0 L - int n = s.length();
# |0 f: b. G: Y$ ]$ T2 O6 |4 [ - char[] str = s.toCharArray();
+ ]6 b8 `" g6 x2 E1 ? - if (str[n - 1] == '1') {
& t3 R% S9 {! I$ O5 H/ ` - return false; , [6 h: l) u5 f, ~& K$ m
- }
: K+ l: |4 n7 Q5 S/ a - LinkedList<Integer> queue = new LinkedList<>(); 7 c, ^# f: g- T. N- e7 X
- queue.add(0);
9 M" ]+ n/ F- S3 s1 J) O - for (int i = 1; i < str.length; i++) { % e2 x6 | |( S& N( f: K3 J
- while (!queue.isEmpty() && queue.getFirst() + maxJump < i) { # w: b5 T( | G/ ~8 r, t
- queue.pollFirst(); ( F1 ^8 k' X$ U$ ~+ K
- } ! Z* ]& g2 D6 C4 ^" P% I
- if (!queue.isEmpty() && str[i] == '0' && queue.getFirst() + minJump <= i) { - @' K! r2 p3 |; B
- if (i == str.length - 1) {
4 [4 ?/ j# ~4 O& ? - return true; / ?7 e! F" B# d8 Z: U) g9 g
- }
$ O; Y; [# k) s - queue.add(i);
& c, Z, d* I3 p1 T. E! h k0 u - }
- U, Y @& `+ c7 |. E: y9 u - }
0 R b" B3 z/ a5 ? W' {# c - return false; 0 @ W0 A: H& x. a) r) V
- }
) W# Q' a% _& q# z0 j; E: | - }
复制代码No.4 石子游戏 VIII 解题思路 看似每次要重新放回去一个总和石子很复杂,但其实恰相反:放回去的石子必然被对手拿到,因此抵消了自己拿到的和。 代码展示 - class Solution { # E" ^6 [: A" c. S
- public int stoneGameVIII(int[] stones) {
3 A: z1 f" Y" S b4 Q. G, | - int n = stones.length; 0 m& V( I; K. w
- long[] sum = new long[n]; ! M4 S, \- x% W4 B. ?
- sum[0] = stones[0];
- i8 A: B7 H+ b- N) e - for (int i = 1; i < n; i++) {
% T# W5 r3 j2 |, U" l. b - sum[i] = sum[i - 1] + stones[i];
1 F3 t# M1 |. }6 m# v - } # o7 H7 j5 d! m' g- T
- long[] dp = new long[n]; , R( H S. |2 Y0 \% @, ]- ?+ n& B7 I0 s
- dp[n - 1] = sum[n - 1];
& Z: a" I, s* O - long max = dp[n - 1]; % T5 ?5 X X3 H, f% F& B4 x
- for (int i = n - 2; i > 0; i--) {
9 g1 `5 N* o/ E6 D' r- b - dp[i] = sum[i] - max;
% s3 o& N8 [3 ?0 x/ F- q; b+ v( a - max = Math.max(max, dp[i]); : F. s$ w5 O) E: R+ R; W
- } 7 V/ q1 H0 K9 k) q& @9 W2 a7 b; G" y
- return (int) max; / C3 f. z: i" [; H$ [0 g R
- }
& n+ k8 }' V+ e - }5 ~/ F M" N% b- L+ f' u
复制代码 9 o" r4 J% E: R# x9 A: g
|