力扣刷题——695.岛屿的最大面积 (!!!运行时间有点慢,待优化
695. 岛屿的最大面积
找出最大的岛屿,使用深度搜索
注意需要先检查边界再判断数组的具体值,否则会溢出
package leetcode;
public class T695 {
public static void main(String[] args) {
int[][] grid = { { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 } };
System.out.println(new T695().new Solution().maxAreaOfIsland(grid));
}
class Solution {
int ans = 0;// 记录最大岛屿面积
int tmp;// 暂时记录每次找到的岛屿面积
boolean flag[][] = new boolean[50][50];// 初始为false
int v[] = { 0, 1, 0, -1 }, h[] = { -1, 0, 1, 0 };// 偏移量
public int maxAreaOfIsland(int[][] grid) {
for (int i = 0; i < grid.length; ++i) {
for (int j = 0; j < grid[0].length; ++j) {
if (grid[i][j] == 1 && flag[i][j] == false) {
tmp = 0;// 重置
getIslandArea(grid, i, j);
ans = Math.max(ans, tmp);
}
}
}
return ans;
}
public void getIslandArea(int[][] grid, int sr, int sc) {
if (sr < 0 || sc < 0 || sr >= grid.length || sc >= grid[0].length) {// 检查边界
return;
}
if (grid[sr][sc] == 1 && flag[sr][sc] == false) {// 如果为1且未标记
tmp++;
flag[sr][sc] = true;// 标记
for (int i = 0; i < 4; i++) {// 四个方向
getIslandArea(grid, sr + v[i], sc + h[i]);
}
}
}
}
}
代码运行结果有点拉,待优化。。。。
在处理输入数据时写了一个简单的工具类,熟悉一下map和StringBuilder的操作。这个工具类用于批量替换字符串中的指定符号,后续继续优化一下
package leetcode.utils;
import java.util.HashMap;
import java.util.Map;
public class StrUtils {
private StrUtils() {
};
/**
* 改变字符串中的字符为特定字符
*
* @param str 待改变的字符
* @param map map中前一个是待修改字符,第二个是修改后的字符
* @return 返回修改后的字符串
*/
public static String changeChar(String str, Map<Character, Character> map) {
StringBuilder sBuilder = new StringBuilder(str);// StringBuilder适合修改
for (int i = 0; i < str.length(); ++i) {
if (map.get(sBuilder.charAt(i)) != null) {// 字符存在map中就修改
sBuilder.replace(i, i + 1, String.valueOf(map.get(sBuilder.charAt(i))));
}
}
return sBuilder.toString();
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
Map<Character, Character> map = new HashMap<>();
map.put('[', '{');
map.put(']', '}');
System.out.println(StrUtils.changeChar("[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]", map));
}
}
posted on 2023-02-17 16:44 pumpkinsBig 阅读(18) 评论(0) 收藏 举报
浙公网安备 33010602011771号