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集团##笔试题目##题解#
