找回密码
 注册账号
img_loading
智能检测中
置顶:如何加入2024届新生微信群

[吹水聊天] 上岸算法 I LeetCode Weekly Contest 232解题报告

上岸算法 回复:0 | 查看:3543 | 发表于 2021-3-17 08:20:17 |阅读模式 |复制链接

UWCSSA提醒您:

警惕网络诈骗与盗号,不要在他人发送的网站中输入密码,换汇或付款时请小心诈骗。

为了避免个人信息泄漏,建议在帖子中使用不常用的邮箱,或使用私信发送联系方式(点击对方的头像,然后“发送消息”)。

帖子通过审核只代表内容不违规,CSSA 不会验证内容的真实性。请谨防诈骗。

本帖最后由 上岸算法 于 2021-3-17 08:30 编辑 ! J6 K5 Q* {/ h9 a8 w, ]! [0 z+ [
/ f  n) O1 H- ~: {+ {$ Q* W
No.1 仅执行一次字符串交换能否使两个字符串相等
解题思路
签到题,枚举一遍统计出所有不想等的位置。
代码展示
  1. class Solution {( G! `+ e( B8 Q
  2.     public boolean areAlmostEqual(String s1, String s2) {
    2 N0 K  E* l! V7 T, \
  3.         List<Integer> differ = new ArrayList<>();
    8 R; _  h% c5 Q7 g7 n; j
  4.         for (int i = 0; i < s1.length(); i++) {- ^8 f3 b0 G" d. u4 [
  5.             if (s1.charAt(i) != s2.charAt(i)) {
    2 _7 g! d# L4 K
  6.                 differ.add(i);3 R* C" t' |. G' W1 G. ^: [3 D! V% ^
  7.             }: T, w" `2 [6 x! a4 N6 u
  8.         }* w& Z: Y& p: f5 p3 C
  9.         return differ.size() == 0 ||
    # ]5 y8 N$ [4 _/ l$ e" O9 M
  10.                 (differ.size() == 2 &&. F$ k1 J, o( Q- |+ f* s
  11.                         s1.charAt(differ.get(0)) == s2.charAt(differ.get(1)) &&; O. J4 Y4 [# m  a
  12.                         s1.charAt(differ.get(1)) == s2.charAt(differ.get(0))! y5 V1 W5 j4 h; M
  13.                 );
    4 b; W+ c% C0 P) c& l1 l! K
  14.     }
    , q9 r8 `6 \1 z6 e
  15. }
复制代码
! W9 F* A" i& }) X
9 z4 x, u$ K$ A5 m( G
No.2 找出星型图的中心节点
解题思路
n 个点 n - 1 条边必然是树。因为是星型图,所以叶子结点的度数均为 1. 只要一个节点在边中出现了两次以上,它必然是中心节点。
代码展示
  1. class Solution {
    ( I5 Y; K/ U5 Z9 L% }5 Q3 u
  2.     public int findCenter(int[][] edges) {
    1 S1 |9 J5 g1 E9 ~% c  k
  3.         Set<Integer> set = new HashSet<>();8 n1 Q1 `7 K9 |8 s3 X/ W0 [
  4.         for (var edge : edges) {
    , Z* ~7 K6 _2 C5 A- X# L
  5.             for (int e : edge) {
    ) _1 Y: p* R4 q% J
  6.                 if (set.contains(e)) {
    - z# \& o9 A7 U3 L0 B1 ~
  7.                     return e;& e# I- _$ y$ x% P2 S- I
  8.                 }7 ]5 C" Z$ c7 ^5 F+ @
  9.                 set.add(e);3 v" \  ]+ C, B+ P- x
  10.             }
    # E/ V2 E- I$ [: N" _
  11.         }4 b7 v! i6 Z, n
  12.         return -1;
    " }3 W5 d2 f: W
  13.     }7 X5 A; ]% }; M
  14. }
复制代码

" c9 f) n6 D% J, O+ m2 C
No.3 最大平均通过率
解题思路
贪心,每次放一个学生进入某一个班级,进入能提升通过率提升地最多的那个班级。
代码展示
  1. class Solution {$ C: p  Z+ q. k% |6 b+ v1 o
  2.     static class Class {6 F# l" B/ P& J" _! H: s
  3.         int pass;0 J7 u6 t, y8 j, G2 a4 \; x  x
  4.         int total;5 q: x7 p% R. C% d
  5.   [2 E: T2 z4 x1 M
  6.         public Class(int pass, int total) {5 |5 `, W3 i9 X" P. ~, G
  7.             this.pass = pass;/ E, Z+ v; F) e2 T9 I
  8.             this.total = total;: X7 O/ _3 ^% L" a: M: G2 H
  9.         }
    0 h1 H1 T0 u5 V! q
  10. : G! J( d8 R$ N. U! k
  11.         double differ() {1 o0 u2 z% X: L: _, {4 s9 p
  12.             return (double) (pass + 1) / (total + 1) - (double) pass / total;8 `: [( Y4 T" t
  13.         }1 z4 M1 a& V6 H7 N
  14.     }
    ; a; @# F/ ?( x* s% e; M+ M$ r
  15. 4 m& a3 M# M; ?8 ?; c1 |- r( t
  16.     public double maxAverageRatio(int[][] classes, int extraStudents) {
    3 K9 }" k+ z8 R& {# |
  17.         PriorityQueue<Class> heap = new PriorityQueue<>((c1, c2) -> c1.differ() > c2.differ() ? -1 : 1);* I8 D# B+ L+ S4 ]
  18.         for (var c : classes) {. J  F$ R5 n$ y( T# m; ^" Q  N
  19.             heap.add(new Class(c[0], c[1]));
    4 m% C( E. W- g1 l' l
  20.         }
    : ?9 y; d, T( z. x6 U3 n- b) X
  21.         for (int i = 0; i < extraStudents; i++) {
    ) v) ]# M. |- N# S  j) `( s1 d
  22.             Class c = heap.poll();% z, ?. b5 n" B1 x
  23.             heap.add(new Class(c.pass + 1, c.total + 1));
    + W  x' t; Q% ]/ L' o$ D0 m
  24.         }
    % V0 t: X$ r  {& [# b# r6 A
  25.         double sum = 0;
    1 u! y& K1 e& b! [* f/ w5 b
  26.         while (!heap.isEmpty()) {1 |! B# q4 Q- A! j0 w/ g: j6 S1 ]
  27.             Class c = heap.poll();
    ' f" c' H2 Y7 B0 `  c) u
  28.             sum += (double) c.pass / c.total;
    $ H# W' N* e5 D' u* g/ J  H# ^+ X
  29.         }
    & n4 b! E7 W  R. l) c) d
  30.         return sum / classes.length;
    % l2 x4 y5 s2 x. W; W/ H1 G
  31.     }
    ) s$ _9 q& u. N2 V; g
  32. }
复制代码
+ `& ^8 |( v4 d, u9 Y! @
No.4 好子数组的最大分数
9 z$ ?; c3 N( E1 T' S4 O
解题思路
单调栈,与最大柱状图类似,找到一个值的左右侧第一个比它小的即可。
代码展示
  1. class Solution {
    ( F" J0 ?1 x: O1 r+ P0 z. f
  2.     public int maximumScore(int[] nums, int k) {! |. j' ?& S- p% z7 t) w
  3.         int[] heap = new int[nums.length + 5];
    4 Z* V- \) o4 I
  4.         int top = 0;
    2 O$ d9 c* U4 w
  5.         int res = 0;6 X2 T) Z2 \7 }; L3 o& x
  6.         for (int i = 0; i < nums.length; i++) {& j! x7 \& |6 }! z0 |: q& \3 X
  7.             while (top > 0 && nums[heap[top]] > nums[i]) {
    8 |0 v6 O* {4 y) ~/ Q1 q# H# X2 a
  8.                 int right = i;% \& N  i% A1 T! a
  9.                 int left = top > 1 ? heap[top - 1] : -1;
    ; f( l* `4 e6 F$ k0 ]; E
  10.                 if (left < k && right > k) {
    ' `( G5 X% E2 E9 Z2 M3 M
  11.                     res = Math.max(res, (right - left - 1) * nums[heap[top]]);
    ; ^6 k! L- T, {$ ]
  12.                 }
    7 c+ k7 x0 A( g( b" T
  13.                 top--;
    8 y; o6 w% M+ O7 D' N
  14.             }- G! Y0 F* n2 m! l# a1 d# U+ m
  15.             heap[++top] = i;
    # P6 X) a( O# s- ~+ y% o! [. m
  16.         }7 g) i5 D2 a+ i5 C3 z" [% j" }- Y
  17.         while (top > 0) {. d: q, G9 _7 x, \- _
  18.             int right = nums.length;/ J+ h* L5 Y  [( a; c
  19.             int left = top > 1 ? heap[top - 1] : -1;* ?1 ^" T. D, N6 }
  20.             if (left < k && right > k) {4 @1 U. H5 i4 T' O
  21.                 res = Math.max(res, (right - left - 1) * nums[heap[top]]);
    $ |: |0 x: p- U, ~* o. r$ R
  22.             }6 M' l' Z0 Z$ x" j+ \& B4 T
  23.             top--;% _7 ]8 p, F/ t. v0 r( S$ Y
  24.         }2 ~$ O$ |7 U/ R# _, b; V
  25.         return res;0 r* V# |0 p  W7 J, z' i7 D
  26.     }. \) w1 G: m! q$ `
  27. }
复制代码
联系上岸小助手年糕,参与免费带刷
; m& \. l9 H; \2 r, `/ i

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

登录 发布 快速回复 返回顶部 返回列表