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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM