网易4/22Web后端
第一题
public int putGems (int[] price, int k) { // write code here return dfs_max(price, k, 0, price.length - 1) - dfs_min(price, k, 0, price.length - 1); } public int dfs_max(int[] price, int k, int begin, int end){ int res = 0; if(k == 1){ return price[begin] + price[end]; } //putGems(new int[]{2, 3, 5, 4}, 2) for(int i = begin; i <= end; i++){ if(end - i + 1 >= k){ res = Math.max(dfs_max(price, 1, begin, i) + dfs_max(price, k - 1, i + 1, end), res); } } return res; } public int dfs_min(int[] price, int k, int begin, int end){ int res = Integer.MAX_VALUE; if(k == 1){ return price[begin] + price[end]; } for(int i = begin; i <= end; i++){ if(end - i + 1 >= k){ res = Math.min(dfs_min(price, 1, begin, i) + dfs_min(price, k - 1, i + 1, end), res); } } return res; }
第二题
public int getEstTime (int[][] map, int a_x, int a_y, int b_x, int b_y) { // write code here m = map.length; n = map[0].length; dfs(map, a_x, a_y, b_x, b_y, 0); if(res == Integer.MAX_VALUE){ return -1; } if(res % 2 == 0){ return res / 2; } return res / 2 + 1; } public void dfs(int[][] map, int a_x, int a_y, int b_x, int b_y, int step){ if(a_x < 0 || a_x == m || a_y < 0 || a_y == n || map[a_x][a_y] == 0){ return; } if(a_x == b_x && a_y == b_y && res > step){ res = step; return; } map[a_x][a_y] = 0; dfs(map, a_x + 1, a_y, b_x, b_y, step + 1); dfs(map, a_x, a_y + 1, b_x, b_y, step + 1); dfs(map, a_x - 1, a_y, b_x, b_y, step + 1); dfs(map, a_x, a_y - 1, b_x, b_y, step + 1); map[a_x][a_y] = 1; }