算法刷题手记(2)

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。算法刷题手记(2),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

描述

给一个n*m大小的矩阵,寻找矩阵中所有比邻居(上下左右,对角也算,不考虑边界,即8个)都严格大的点。
返回一个n*m大小的矩阵,如果原矩阵中的点比邻居都严格大,则该位置为1,反之为0

 

 1 public int[][] highpoints(int[][] grid) {
 2         // write your code here
 3         /**
 4          * 创建一个同样规格的数组
 5          */
 6         int[][] ints = new int[grid.length][grid[0].length];
 7         /**
 8          * 循环遍历数组,目的:为了判断每个位置是否比周围都大
 9          */
10         for (int i = 0; i < grid.length; i++) {
11             /**
12              * 创建一个集合存储 当前遍历元素 判断范围的横坐标(比如:判断[2,2] 位置是否符合条件 集合中存储的横坐标范围是(1,2,3)),下面集合同理存储纵坐标范围
13              */
14             ArrayList<Integer> abscissas = new ArrayList<>();
15             abscissas.add(i - 1);
16             abscissas.add(i);
17             abscissas.add(i + 1);
18             for (int j = 0; j < grid[i].length; j++) {
19                 Boolean flag = true;
20                 ArrayList<Integer> ordinates = new ArrayList<>();
21                 ordinates.add(j - 1);
22                 ordinates.add(j);
23                 ordinates.add(j + 1);
24 
25                 /**
26                  * 取出横坐标和增坐标进行组合,9种组合(其中一种代表的是对比的本体 需要排除,自己跟自己不用比,8个是被对比元素)
27                  */
28                 outer:
29                 for (int x = 0; x < abscissas.size(); x++) {
30                     /**
31                      * 如果横坐标越界 直接结束,
32                      */
33                     if (abscissas.get(x) < 0 || abscissas.get(x) > grid[0].length - 1) {
34                         continue outer;
35                     }
36                     inner:
37                     for (int y = 0; y < ordinates.size(); y++) {
38                         /**
39                          * 判断3个维度:1、纵坐标是否越界  2、当前组合是否是要对比的本体,如果是就要排除  3、判断对比本体是否小于周围元素,如果不小于则置flag=false,如果都大于则flag不变为true
40                          */
41                         if (ordinates.get(y) >= 0 && ordinates.get(y) < grid.length && !(abscissas.get(x) == i && ordinates.get(y) == j) && grid[i][j] <= grid[abscissas.get(x)][ordinates.get(y)]) {
42                             flag = false;
43                             break outer;
44                         }
45                     }
46                 }
47                 /**
48                  * 如果判断完后,flag仍未true,则将待返回数组的当前位置置为1,否则置为0
49                  */
50                 if (flag) {
51                     ints[i][j] = 1;
52                 } else {
53                     ints[i][j] = 0;
54                 }
55             }
56         }
57         return ints;
58     }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/187628.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!