58同城笔试 9.12 3题ac代码+题目
第一题:
代码:
/** * @author MuChengFeng on 2019/9/12 */ import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String strmcf = scan.nextLine(); String[] str = strmcf.split(","); Set set = new TreeSet<Integer>(); for (int i = 0; i < str.length; i++) { set.add(str[i]); } System.out.println(set.size()); } }第二题:
代码:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.TreeMap; /** * @author MuChengFeng on 2019/9/12 */ public class Main { public static final int MIN_MONEY = 100; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 分数 TreeMap<Integer, List<Integer>> map = new TreeMap<>(); int[] people = new int[n]; for (int i = 0; i < n; i++) { people[i] = scanner.nextInt(); if (!map.containsKey(people[i])) { map.put(people[i], new ArrayList<>()); } map.get(people[i]).add(i); } int[] money = new int[n]; int[] tmp = new int[n]; while (!map.isEmpty()) { int lowestKey = map.firstKey(); for (int i : map.get(lowestKey)) { if (i == 0) { tmp[i] = money[i + 1] + 1; } else if (i == n - 1) { tmp[i] = money[i - 1] + 1; } else { tmp[i] = Math.max(money[i - 1], money[i + 1]) + 1; } } for (int i : map.get(lowestKey)) { money[i] = tmp[i]; } map.remove(lowestKey); } int sum = 0; for (int i : money) { sum += i; } System.out.println(sum); } }第三题:
代码:
import java.util.Scanner; /* 1 2 1 2 * @author MuChengFeng on 2019/9/12 */ public class Main { static int n; static int m; public static void main(String[] args) { Scanner scan=new Scanner(System.in); n=scan.nextInt(); m=scan.nextInt(); int[][] dp=new int[n][m]; for(int i=0;i<dp.length;i++){ for(int j=0;j<dp[i].length;j++){ dp[i][j]=scan.nextInt(); } } System.out.println(minSum(dp)); } public static int minSum(int arr[][]) { int dp[][]=new int [n][m]; dp[0][0]=arr[0][0]; for(int i=1;i<arr.length;i++) { dp[i][0]=dp[i-1][0]+arr[i][0]; } for(int j=1;j<arr[0].length;j++) { dp[0][j]=dp[0][j-1]+arr[0][j]; } for(int i=1;i<arr.length;i++) { for(int j=1;j<arr[0].length;j++) { dp[i][j]=Math.min(dp[i-1][j], dp[i][j-1])+arr[i][j]; } } return dp[arr.length-1][arr[0].length-1]; } }
整个过程还是很艰辛的。第三题创建dp的时候,n和m 写成固定的测试用例1 2 调试了半天 才发现。然后 双层循环的第二个条件j<m 开始写成了i<m 也调试了半天。太粗心了导致时间很赶
还好第二题 是我字节跳动 写的原题。一模一样。。就改了一下 值 。就ac了
#58集团##笔试题目##题解#