首页 > 其他分享 >23-05-31 刷题,两道Mid题目

23-05-31 刷题,两道Mid题目

时间:2023-05-31 23:33:13浏览次数:63  
标签:high 23 int 31 05 queue low new root

Mid - 1020. 飞地的数量 - 力扣(LeetCode) - BFS - grid

分析:

  • 飞地,就是被敌人(水)包围的陆地。本题中是指不与任何border相联的1组成,只考虑四个方向。
  • 思路:换种角度,从border的1出发,总共有4个border,利用BFS遍历,初始队列中包含四个border中1的位置,然后将他们标记成其他值(例如 2),这样省掉了一个visit数组,但是会修改输入数组,如果不允许,那么clone一遍即可。
  • 有了思路之后,代码很简单,就是写起来有点长而已。
  • 复杂度分析:时间上,每个点最多进入queue一次,出队列一次,因此时间复杂度是O(nm); 空间是 O(nm) 队列中最大的长度是nxm
class Solution {
    public int numEnclaves(int[][] A) {
        int n = A.length, m = A[0].length;
        Queue<int[]> queue = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            if (A[i][0] == 1) {
                queue.offer(new int[] {i, 0});
                A[i][0] = 2;
            }
            if (A[i][m - 1] == 1) {
                queue.offer(new int[] {i, m - 1});
                A[i][m - 1] = 2;
            }
        }
        for (int j = 0; j < m; j++) {
            if (A[0][j] == 1) {
                queue.offer(new int[] {0, j});
                A[0][j] = 2;
            }
            if (A[n - 1][j] == 1) {
                queue.offer(new int[] {n - 1, j});
                A[n - 1][j] = 2;
            }
        }

        int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
        // do BFS from each border islands
        while (!queue.isEmpty()) {
            int[] cur = queue.poll();
            int x = cur[0], y = cur[1];
            // check each dir
            for (int[] dir : dirs) {
                int nx = dir[0] + x, ny = dir[1] + y;
                if (nx >= 0 && nx < n && ny >= 0 && ny < m && A[nx][ny] == 1) {
                    A[nx][ny] = 2;
                    queue.offer(new int[] {nx, ny});
                }
            }
        }

        // count remaining 1's
        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (A[i][j] == 1) {
                    ans++;
                }
            }
        }
        return ans;
    }
}

Mid - 669. 修剪二叉搜索树 - 力扣(LeetCode) 好题-DFS有返回值

分析:

  • 题目的意思,画个图就好理解了
  • 思路:想象成递归函数,子问题解决了,怎么拼接成父问题。如果当前root.val 在[low, high]范围内,那么我们只需要trim左右两个子树即可,返回trim之后的root。然后分析仪下,如果root.val在范围之外怎么办,自然是一边不需要了,返回另外一边可能有节点的子树即可。
  • 复杂度分析:时间O(n), 空间O(n) 当二叉树蜕化成单支的链表时,栈的最大调用深度是n.
class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) { // time: O(n), space: O(n)
        if (root == null) return null;
        if (root.val < low) {
            return trimBST(root.right, low, high);
        }
        if (root.val > high) {
            return trimBST(root.left, low, high);
        }
        root.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);
        return root;
    }
}

标签:high,23,int,31,05,queue,low,new,root
From: https://www.cnblogs.com/xianzhon/p/17447672.html

相关文章

  • 2023.5.31——软件工程站立会议(阶段二)
    站立会议内容:1.整个项目预期的任务量:目前已经花的时间:剩余的时间:2.任务看板照片: 3.团队照片: 4.产品状态:最新做好的功能:正在完成中5.燃尽图:......
  • 2023.5.31——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午考数据库。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 2023.5.31 Linux系统⽤户管理
    1.⽤户基本概述1.1⽤户相关的命令1.2⽤户创建的原理2.⽤户密码管理3.组的基本管理4.⽤户身份切换5.⽤户身份提权6.⽇志相关审计1.⽤户基本概述Linu属于多⽤户操作系统,在windows中,可以创建多个⽤户,但不允许同⼀时间多个⽤户进⾏系统登陆,但是Linux可以同时⽀持多个⽤户同时登陆......
  • 2023.5.31-Linux系统基本权限
    02.Linux系统基本权限1.权限修改命令chmod2.属主属组修改命令chown3.基础权限设置案例Linux中的⽂件或⽬录的权限和⽤户及⽤户组关联很⼤,Linux中每个⽂件或⽬录都有⼀组共9个基础权限位,每三个字符被分为⼀组,他们分别是属主权限位(占三个字符)、属组权限位(占三个字符)、其他⽤户权......
  • 5.31每日总结
    今天又重新弄了弄周一考试的题,然后找了几个认识的朋友下载了以下简单测试。<%@pageimport="wangzhan.Thesql"%><%@pageimport="wangzhan.Pd_P_assignment"%><%@pageimport="wangzhan.Pd_S_assignment"%><%@pagelanguage="java"cont......
  • 2023.5.31每日总结
    <%--CreatedbyIntelliJIDEA.User:王磊Date:2023/5/29Time:15:52TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pageimport="softwareengin.teacher"%><%@pageimport="softwareengin.AllMet......
  • 每日总结-23.5.31
    <%@pageimport="java.util.Calendar"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional......
  • 会声会影2023这款视频剪辑软件怎么样?
    众所周知,每每有新兴行业逐渐崛起壮大的时候,随机而来的就是这个行业创造出的衍生行业,比如说现在的短视频平台或者是视频剪辑行业,都是很明显的例子,今天我们就针对剪辑软件来和大家聊一聊,会声会影2023这款视频剪辑软件怎么样?在最新2023版本的会声会影中,用户可以选择在内置视频编辑器中......
  • 2023年5月31日,包装类,Match,System
    1.包装类/** *知识点:包装类 *理解:8种基本数据类型对应类 *出现原因:Java为纯面向对象语言(万物皆对象),8种基本数据类型不能new对象。 * 就破坏了Java为纯面向对象语言的特征,所以Java又为8种基本数据类型 * 分别匹配了对应的类,这种类叫做包装类/封装类 * ......
  • 2023ccpc大学生程序设计竞赛-zx
     这次ccpc整体来说做题做的比较卡,第一个签到都wa了,后面几道中档题全都是至少wa一次才能过,这导致我们不仅罚时增加也导致需要大量时间修改代码,还有一个G题很可惜,当时只注意到B过题多所以有点被带歪了,对着一个n更号n的算法研究了好久,其实当时就应该想到这个1e9的时间复杂度很难优......