引言
小菜鸡刚开始自己的秋招,投了十几家终于有一个笔试了,记录一下自己的第一场比试。
用友笔试
前一天投的,当天就给我发了测评和笔试,有点子震惊,开始之前还是很忐忑的。
题目
四个问题,分值15,15,20,40;
第一题 力扣的跳跃游戏
我好菜啊,之前做过,但是过了很久,思路也没那么清晰了,第一次做ACM处理输入很拉跨,前十几分钟都在处理输入,没导包,一直报错。
最后在第四十分钟,把这个ac了我真是笨蛋。
class Solution {
public boolean canJump(int[] nums) {
int end = 0;
int maxPosition = 0;
for(int i = 0; i < nums.length - 1; i++){
//找能跳的最远的
maxPosition = Math.max(maxPosition, nums[i] + i);
if( i == end){ //遇到边界,就更新边界,并且步数加一
end = maxPosition;
}
}
return end>=(nums.length - 1);
}
}
第二题 类似力扣的三数之和
我也是用的排序+双指针,应该是有条件写少了,最后通过了75%,看不见用例好烦。
贴一个三数之和。
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res =new ArrayList<>();
for(int k=0;k<nums.length-2;k++){
if(nums[k]>0){
break;
}
if(k>0&&nums[k]==nums[k-1]){
continue;
}
int i=k+1;
int j=nums.length-1;
while(i<j){
int sum=nums[k]+nums[i]+nums[j];
if(sum<0){
while(i<j&&nums[i]==nums[++i]){}
}else if(sum>0){
while(i<j&&nums[j]==nums[--j]){}
}else{
res.add(new ArrayList<Integer>(Arrays.asList(nums[k],nums[i],nums[j])));
while(i<j&&nums[i]==nums[++i]){}
while(i<j&&nums[j]==nums[--j]){}
}
}
}
return res;
}
}
第三题,点石成金
大意是有一个m*n的方阵,每一次你可以选择一个位置点石成金,每次会点石成金一个正方形的区域,遇到边界或者已经点金的就停下,问全部点金的最小代价。
因为不知道用例,自己也想不到什么特殊情况,我就用了贪心,每次取一个短边点一个正方形,不断重复,最后通过70%
第四题没看懂题目也没记住(awsl)0%
总结
不太习惯自己处理输入输出,scanner用的很差劲浪费时间,而且自己做过的题还需要强化,dp掌握的也不好,需要再刷。
加起来通过了2.45,许愿一个面试,估计也会被狠狠拷打,八股背了忘忘了背,感觉一点不熟练,有待检验