iHandy笔试
我去,我心态炸了,iHandy笔试写完最后一题,还剩不到两分钟,然后提交上去后。。
import javafx.util.Pair;这个工具包居然不在jdk里,导不进去,我记得LeetCode可以导进去的,然后。。。
附上iHandy第二题代码,求大佬指正有没有可以优化的地方,个人感觉写的有点冗余。
public static int [] getSorted(int [][] colors) { if (colors == null || colors.length == 0) { return new int[0]; } HashMap<Integer, Pair<Integer, Integer>> map = new HashMap<>(); int m = colors.length; int n = colors[0].length; boolean [][] visited = new boolean[m][n]; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (visited[i][j]) { continue; } int s = dfs(colors, visited, i, j, colors[i][j]); if (!map.containsKey(colors[i][j])) { map.put(colors[i][j], new Pair<>(s, s)); } else { Pair<Integer, Integer> p = map.get(colors[i][j]); map.put(colors[i][j], new Pair<>(p.getKey() + s, s > p.getValue() ? s : p.getValue())); } } } int [][] res = new int[map.size()][3]; int index = 0; for (int i : map.keySet()) { res[index][0] = i; res[index][1] = map.get(i).getKey(); res[index][2] = map.get(i).getValue(); index++; } Arrays.sort(res, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if (o1[1] == o2[1]) { return o2[2] - o1[2]; } else { return o2[1] - o1[1]; } } }); int [] result = new int[res.length]; for (int i = 0; i < res.length; ++i) { result[i] = res[i][0]; } return result; } public static int dfs(int [][]colors, boolean [][]visited, int i, int j, int target) { if (i < 0 || j < 0 || i >= colors.length || j >= colors[0].length || visited[i][j]) { return 0; } if (colors[i][j] == target) { visited[i][j] = true; return 1 + dfs(colors, visited, i + 1, j, target) + dfs(colors, visited, i - 1, j, target) + dfs(colors, visited, i, j + 1, target) + dfs(colors, visited, i, j - 1, target); } return 0; }