前言
利用周末时间做了这套网易2019实习生招聘编程题,链接如下:
题目链接
成绩
先来看一下博主的成绩,打了67分,完全做对了4道题,另外的4道题中1道题完成了80%,1道题完成了30%。评价一下就是这套题的难度还可以,只是三个小时连续打代码的确很累,退出之后再次进入又重新做了,牛客也不能接着做…这点好坑,反复浪费了很多时间。下次再刷这种题,必须一口气刷完。
题目解析
1.牛牛找工作
题目描述
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。
思路
这道题肯定是需要哈希表,用来存储不同难度对应的报酬。我们的思路很简单,创建两个数组一个数组包括任务难度与小伙伴的能力,另一个数组只存储小伙伴的能力,然后将第一个数组排序,设置一个变量用于存储小于等于当前能力值的最大报酬,遍历整个数组,更新该变量并赋值给哈希表。输出的时候只要根据第二个数组的顺序去哈希表中获取即可。
一定要将第一个数组排序是因为这样数组才是按照能力从小到大排序。
代码
import java.util.*;
public class Main{
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
HashMap<Integer,Integer> hs = new HashMap<>();
int []ablitiy = new int[n+m];
int[]people = new int[m];
for(int i=0;i<n;i++)
{
ablitiy[i] = sc.nextInt();
int money = sc.nextInt();
hs.put(ablitiy[i],money);
}
for(int i=0;i<m;i++)
{
ablitiy[n+i] = sc.nextInt();
people[i] = ablitiy[n+i];
if(!hs.containsKey(ablitiy[n+i]))
{
hs.put(ablitiy[n+i],0);
}
}
Arrays.sort(ablitiy);
int max = 0;
//不断更新max,让max为不超过当能力值(ablitiy[i])的最大报酬
for(int i=0;i<n+m;i++)
{
//与当前能力值对应的报酬比较。
max = Math.max(max,hs.get(ablitiy[i]));
hs.put(ablitiy[i],max);
}
for(int i=0;i<m;i++)
{
System.out.println(hs.get(people[i]));
}
}
}
2.被3整除
题目描述
小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
思路
刚开始没有认真看题,以为加到10之后再加的是1,其实是11,所以阿认真审题是多么的重要!!!!!思路其实很简单我们都知道如何判断一个数能否除3就是看他所有位的加和是否能整除3。
代码
题目很鸡贼,输入的两个值可能或超过范围限制,所以要使用long型,当然那个各位之和也是要用long型,这个坑了我好久= =
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
long l = in.nextLong();
long r = in.nextLong();
long lnow = l*(l+1)/2;
int times = 0;
for(long i=l;i<=r;i++)
{
if(i!=l)
{
lnow+=i;
}
if(lnow%3==0)
times++;
}
System.out.println(times);
}
}
}
3.安置路灯
题目描述
思路
由于时间不够,我就跳过了这道题,我一直觉得这个题是不是动态规划或者要用滑动窗口?当时想到了只要当前这个位置需要点亮,那么就放置一盏路灯,然后其左边和右边的都被点亮了。结果看了答案好简单。
就是判断当前是否为’.’,如果是的话就加一盏灯,然后向后走三位,如果不是的话,就是‘X’,那么直接向后走一位。
代码
import java.util.*;
public class Main{
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
int t1 = sc.nextInt();
while(t1>0)
{
int length = sc.nextInt();
sc.nextLine();
String s = sc.nextLine();
int num = findNum(s);
System.out.println(num);
t1--;
}
}
}
public static int findNum(String s)
{
int times = 0;
for(int i=0;i<s.length();i++)
{
char now = s.charAt(i);
if(now=='.')
{
times++;
i+=2;
}
else
;
}
return times;
}
}
迷路的牛牛
题目描述
思路
这道题可以用很简单的方式去做,不管途中向左了转了多少次,向右转了多少次,都可以转换为向左转了X次,X可正可负,
同时,牛牛向左转四次就又回到了最初的起点,所以这个X还需要去除四取余数。不同的值对应不同的结果。当X为负时,我们就将X变成向右转的次数-向左转的次数,然后用4去减该值即可。N对应0,W对应1,S对应2,E对应3。
代码
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int N = in.nextInt();
in.nextLine();
String s = in.nextLine();
int l = 0;
int r = 0;
for(int i=0;i<s.length();i++)
{
char c = s.charAt(i);
if(c=='L')
l++;
else
r++;
}
int dire = 0;
if(l>r)
dire = (l-r)%4;
else if(r>l)
dire = 4-(r-l)%4;
char c = 'N';
if(dire==1)
c = 'W';
else if(dire==2)
c = 'S';
else if(dire==3)
c = 'E';
System.out.println(c);
}
}
}