大疆 客户端开发 笔经(已凉)
2020.08.16 晚上 笔试 2h
1)于是他想到一个计划,他先将每个游戏标上一个成就值,同时对每个游戏都估算一个通关所需要的天数,他计划在未来X天内让自己玩游戏的成就达到最大,那么他应该怎么做计划呢?(假设每个游戏最多只计划玩一遍,而且每个游戏必须玩完通关才能取得成就值,且通关每个游戏最小时间单位是1天)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int x = sc.nextInt(); int[] a = new int[n]; int[] b = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); b[i] = sc.nextInt(); } int[][] dp = new int[n + 1][x + 1]; for (int i = 0; i < n; i++) { for (int j = 1; j <= x; j++) { if(j >= b[i]) { dp[i + 1][j] = Math.max(dp[i][j], dp[i][j - b[i]] + a[i]); } else { dp[i + 1][j] = dp[i][j]; } } } System.out.println(dp[n][x]); } }
2)题目是这样的:给定一个非负的、字符串形式的整形数字,例如"12353789",字符串的长度也就是整形数字的位数不超过10000位,并且字符串不会以0开头,小C需要挑选出其中K个数字(K小于字符串的长度)并删掉他们,使得剩余字符组成新的整数是最小的。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int k = sc.nextInt(); System.out.println(new Main().deleteKNums(s, k)); } public String deleteKNums (String s, int k) { StringBuilder sb = new StringBuilder(); int n = s.length(); char[] chars = new char[n]; int cnt = 0; for (int i = 0; i < n; i++) { while (k > 0 && cnt > 0 && s.charAt(i) < chars[cnt - 1]) { k--; cnt--; } chars[cnt++] = s.charAt(i); } int idx = 0; while (idx < cnt && chars[idx] == '0') { idx++; } if(idx == cnt) { return "0"; } while(idx < cnt) { sb.append(chars[idx++]); } return sb.toString(); } }
第一题没做,第二题100%,第三题82%。
#大疆##校招##笔经##Android#