zoukankan      html  css  js  c++  java
  • leetcode——16.19.水域大小

    public int[] pondSizes(int[][] land) {
            List<Integer> list = new ArrayList<>();
            int temp;
            for (int i = 0; i < land.length; i++) {
                for (int j = 0; j < land[0].length; j++) {
                    temp = findpond(land, i, j);
                    if (temp != 0) {
                        list.add(temp);
                    }
                }
            }
            int[] result = list.stream().mapToInt(Integer::valueOf).toArray();
            Arrays.sort(result);
            return result;
        }
    
        private int findpond(int[][] land, int i, int j) {
            int sum = 0;
            if (i < 0 || i >= land.length || j < 0 || j >= land[0].length || land[i][j] != 0) {
                return sum;
            }
            land[i][j] = -1;
            sum++;
            sum += findpond(land, i + 1, j);
            sum += findpond(land, i, j + 1);
            sum += findpond(land, i - 1, j);
            sum += findpond(land, i, j - 1);
            sum += findpond(land, i + 1, j + 1);
            sum += findpond(land, i - 1, j - 1);
            sum += findpond(land, i + 1, j - 1);
            sum += findpond(land, i - 1, j + 1);
            return sum;
        }

     依然是别人的题解,自己看懂写了一遍。

    对于DFS和递归还是不熟练,很多地方就想不到,命名也是不难的东西。

    这里面将Arraylist转化为list的这个语句

    int[] result = list.stream().mapToInt(Integer::valueOf).toArray();

    多妙啊,对stream()与lambda的用法尚且不会,有待学习。

    对list进行排序,我还傻傻地写了冒泡排序,实际上一句话就可以搞定啊:

    Arrays.sort(result);

    多神奇啊,这还是刷题刷得不够多的原因,要继续加油啊。

    像这道题,思路多清楚。遍历矩阵,遇到非零元素,就返回结果为0.遇到代表池塘的0,就将该元素标记为-1,可以避免重复搜索,并且在8个方向上进行统计池塘面积。

    多妙啊!!!!

    ——2020.6.21

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    python实现Socket通信原理
    SSL加密原理
    HackTheBox实战
    wireshark实战应用(长期更新,工作随笔)
    DNS域传输漏洞复现
    网站开发语言判断
    Linux:Day39(上) mysql基础
    Linux:Day38(下)
    Linux:Day38(上)
    Linux:Day37(上)
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13171655.html
Copyright © 2011-2022 走看看