9.6 去哪儿笔试 开发
第一题:字符数组字典序 100%
public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(reader.readLine()); String[] as = reader.readLine().split(" "); Arrays.sort(as, (s1, s2) -> (s1 + s2).compareTo(s2 + s1)); for (String str : as) { System.out.printf("%s ", str); } } }
第二题:二分 + 贪心 100%
public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] inputs = reader.readLine().split(" "); int n = Integer.parseInt(inputs[0]); long m = Integer.parseInt(inputs[1]); int[] a = new int[n]; String[] as = reader.readLine().split(" "); for (int i = 0; i < n; ++ i) a[i] = Integer.parseInt(as[i]); int[] b = new int[n]; String[] bs = reader.readLine().split(" "); for (int i = 0; i < n; ++ i) b[i] = Integer.parseInt(bs[i]); int l = 0, r = n - 1; while (l <= r) { int mid = l + (r - l) / 2; if (check(mid, a, b, m)) { r = mid - 1; } else l = mid + 1; } System.out.println(l >= n ? -1 : (l + 1)); } private static boolean check(int k, int[] a, int[] b, long limit) { int[] a_copy = Arrays.copyOfRange(a, 0, k + 1); Arrays.sort(a_copy); int[] b_copy = Arrays.copyOfRange(b, 0, k + 1); Arrays.sort(b_copy); long t = 0L; for (int i = k; i >= 0; -- i) { t += (long) a_copy[i] * b_copy[i]; if (t >= limit) return true; } return false; } }
第三题 没看
#去哪儿旅行秋招#