事先说明,笔者是菜鸟,平时主要做硬件开发,很少研究算法,5题做出3题,但3题在分别在case50%和70%的时候被判断超时。以我这种水平估计凉了。。。
同时很想吐槽一下,官方推荐的答题浏览器是QQ浏览器和谷歌浏览器,结果QQ浏览器崩毁了2次,最后用的360浏览器没卡过一次。
有n个人围坐在一个圆桌周围进行一场圆桌会议,会议开始前从第s (注意不是5) 开始报数,数到第m的人就出列退出会议,然后从出列的下一个人重新开始报数,数到第m的人又出列,。。。,如此重复直到所有的人全部出列为止,现在希望你能求出按退出会议次序得到的人员的序号序列。
输入描述三个正整数n,s,m(n,s,m < 10000)
输出描述退出会议次序序号,一行一个。
示例一输入
3 1 2输出
213 第二题——向右看齐终于看到会做的题了
题目描述小Q是一名体育老师,需要对学生们的队伍整队。现在有n名学生站成一排,第i个学生的身高是hi。现在小Q一声令下:“向右看齐!”,所有的学生都向右看齐了。如果对于下标为i的学生来说,如果学生j满足i<j并且hi<hj,我们就可以说学生i看齐的对象是学生j。现在求出每位学生离他最近的看齐对象。
输入描述第一行输入一个数字n。1 <= n <= 100,000
之后每行一个数字,表示每一个孩子的身高hi(1 <= hi <= 1,000,000)
共n行,按顺序输出每位同学的最近看齐的对象,如果没有,则输出0。
示例一输入
6326112输出
330660 我的逗比代码本代码卡在实验例子的第8个,因为超时。
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); if(n == 0) return; int[] high = new int[n]; for(int i = 0;i < n;i++) high[i] = scanner.nextInt(); for(int i = 0;i < n;i++){ int temp = high[i]; for(int j = i+1;j < n;j++){ if(high[j] > temp){ System.out.println(j+1); break; } if(j == n-1) System.out.println(0); } } System.out.println(0); }} 第三题——括号匹配连题目都没看懂的我在瑟瑟发抖。
题目描述如果一个括号序列,每一个左括号都能找到右括号与其匹配,则这个序列就是合法的括号匹配序列。
小Q现在有两个括号序列,不保证是合法的括号匹配序列。
小Q现在让你帮忙计算有多少种不同的方法可以将两个括号序列合并为一个合法的括号匹配序列。
注意:合并的时候不能改变序列各自原先的顺序。
输入两行包含两个字符串s1,s2
1 <= |s1|,|s2| <= 2500
输出一个整数,即方案数。因为答案可能很大,输出对1e9+7取模的结果。
示例一输入
(()())输出
19 示例二输入
((((()))))输出
42 第四题——小Q发工资如果真的这样发工资,我这种人进去了估计连工资都没有。打工是不可能打工的。
题目描述小Q是某IT公司的CEO,该公司有n名工程师,每名工程师的编程能力都不相同。
小Q给出的工资跟工程师的能力排名有关,如果一个工程师在整个公司能力由大到小的排名中排第x位,而该工程师的编程能力值为y,这位工程师的工资就是y-x元每月。
现在告诉你这n名工程师的编程能力值,小Q提了m个询问,对于每一个询问他会给出一个数字k,问公司里是否有工资为k块钱的程序员,输出对应的人数。
第一行,两个空格间隔的整数n和m(1 <= m <= 80,000 1 <= n <= 100,000),表示工程师人数和询问的次数
第二行,n个用空格间隔的整数,表示每个工程师的能力值Vi(1 <= Vi <= 500,000,000)
接下来有m行,每行一个整数,表示小Q的一次询问。
输出m行,每行一个整数,表示对应询问的答案。
示例一输入
7 46 2 1 3 9 10 72530输出
2023 我的逗比代码此代码卡在case6,被判超时。
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); //工程师人数 int m = scanner.nextInt(); //问题数 int[] power = new int[n]; //工程师分数 int[] problem = new int[m]; //问题 for (int i = 0; i < n; i++) power[i] = scanner.nextInt(); for (int i = 0; i < m; i++) problem[i] = scanner.nextInt(); sort(power, n); int[] money = new int[n]; //工资 for(int i = 0;i < n;i++) money[i] = power[i] - i - 1; for(int what : problem){ int cnt = 0; for(int arg : money){ if(arg == what) cnt++; } System.out.println(cnt); } } //冒泡排序 public static void sort(int[] a, int n) { int i, j; for (i = 0; i < n; i++) { boolean isChange = false; for (j = 1; j < n - i; j++) { if (a[j - 1] > a[j]) { int temp; temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; isChange = true; } } if(!isChange) break; } }} 第五题——小Q与长跑比赛 题目描述一天小Q准备参加马拉松长长长跑比赛。他的迷妹们分成了一个个小团体准备在小Q的跑道上给小Q呐喊助威。
小Q其实并不喜欢长跑,但是又不想在自己的迷妹团们面前表现出来。于是决定在没有迷妹给他加油的路段就减速跑(每米减速一个单位速度),在有迷妹给他加油的路段就匀速跑。当然如果速度已经减为0了就不能继续匀速跑了。
小Q的迷妹虽然很多,但是也是有限的,不可能绕地球两圈,所以小Q在经历了若干次减速后会停下来。那么问题来了,马拉松比赛的起点可能设立在跑道的任何一个地方,这场马拉松比赛小Q到底最多会跑多少米呢?(从出发的地方到达停止的地方的距离。)
第一行两个整数n,v。分别表示小Q的起跑速度(初始速度)。
第二行到第(n+1)行,每行两个整数xi,yi,表示i号迷妹团给小Q加油的区间从第xi米到第yi米,数据保证yi<=xi+1。
1 <= n <= 200,000,1 <= v <= 1000,000,000,1 <= xi < yi <= 1000,000,000
一个整数ans,小Q最多跑的长度。
示例一笔者注:从第2米开始,迷妹团处匀速跑过3米,再跑2米后速度为0,所以一共跑了5米。
输入
输出
5 我的半桶水代码此代码同样因为超时卡在case6。
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); //迷妹数量 int v = scanner.nextInt(); //开始速度 int[] start = new int[n]; int[] end = new int[n]; for(int i = 0; i < n;i++){ start[i] = scanner.nextInt(); end[i] = scanner.nextInt(); } int[] distern = new int[n]; //开始跑路 for(int i = 0; i < n;i++){ int speed = v; int dis = end[i] - start[i]; for (int j = i;;j++){ if(j < n-1) { int dec = start[j + 1] - end[j];//减速路段 if (dec >= speed) { dis += speed; break; } //可以到达下一个迷妹团 speed -= dec; dis += dec; } else { dis += speed; break; } } distern[i] = dis; } int result = distern[0]; for(int max : distern){ if(result < max) result = max; } System.out.println(result); }} 总结笔者现在大三,当初投简历也就想看看腾讯的笔试题是怎样的,还以为会有选择题和填空题的,结果简单粗暴地直接丢出5道编程题。投递时看到移动端开发的岗位是3:1,还以为移动端开发会考一些与安卓相关的题目,但结果。。。这波笔试我是凉了,还是安心准备考研去吧。如果有大神看到这篇文章的话,求告诉我一下你的解题思路,谢谢。