一起讨论一下搜狐的笔试题(附部分代码)
lz蛋疼,面试完腾讯回来,居然忘了搜狐还有笔试。等到想起来的时候,时间只有70分钟了。花了十分钟把选择题选了,然后做编程题。
- 第一题,过河问题,dp,但是不知道为何只有60%,没时间多看,直接进第二题
- 第二题是数字去掉指定个数的数,留下最大的数。循环就可以了。
- 第三题,钻石,做到这儿只剩20分钟,没时间想优化的方法了,直接暴力,计算从每一个下标开始能得到的最大值。结果20%。。。其它的超时了,还有5分钟时间,直接提交了。这个不知道大家用的什么方法。
第一题过河问题 过了60%,大家帮忙看看问题在哪里。
/**
* Created by telnetning on 16/9/21.
*/
import java.util.*;
public class sohuT1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = Integer.parseInt(in.nextLine());
int[] arr = new int[N];
for(int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}
int[] res = new int[N];
for(int i = N - 1; i >= 0; i--) {
if(arr[i] == 0) res[i] = -1;
int Min = 10000;
if(arr[i] > N - 1 - i) {
Min = 1;
} else {
int dep = arr[i];
for(int j = 1; j <= dep; j++) {
if(j >= N) break;
if(res[i + j] == -1) continue;
int s = 1 + res[i + j];
//System.out.println(s);
if(s < Min) Min = s;
}
}
res[i] = Min;
}
System.out.println(res[0]);
}
}
第二题AC,比较简单:
/**
* Created by telnetning on 16/9/21.
*/
import java.util.*;
public class sohuT2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
int n = in.nextInt();
System.out.println(handle(str, n));
}
public static String handle(String str, int n) {
int len = str.length();
char[] arr = str.toCharArray();
for(int i = 0; i < n; i++) {
arr = deleteOne(arr);
}
return String.valueOf(arr);
}
public static char[] deleteOne(char[] arr) {
int index = arr.length - 1;
for(int i = 0; i < arr.length - 1; i++) {
if(arr[i] < arr[i + 1]) {
index = i;
break;
}
}
char[] newArr = new char[arr.length - 1];
for(int i = 0; i < index; i++) {
newArr[i] = arr[i];
}
for(int i = index; i < arr.length - 1; i++) {
newArr[i] = arr[i + 1];
}
return newArr;
}
}
第三天暴力太丑就不提了。
一起讨论下。
查看5道真题和解析