一起讨论一下搜狐的笔试题(附部分代码)
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; } }
第三天暴力太丑就不提了。
一起讨论下。