携程笔试三道编程题

第一题(AC)电话接听最少人员
public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		scanner.nextLine();

		int[] arr = new int[n];
		int[] dep = new int[n];
		for (int i = 0; i < n; i++) {
			String line = scanner.nextLine();
			String[] sa = line.split(",");
			arr[i] = Integer.parseInt(sa[0]);
			dep[i] = Integer.parseInt(sa[1]);
		}

		int result = find(arr, dep, n);

		System.out.println(result);
		scanner.close();
	}
	
	static int find(int arr[], int dep[], int n) {
		Arrays.sort(arr);
		Arrays.sort(dep);

		int result = 0;
		int need = 1;

		int i = 1;
		int j = 0;

		while (i < arr.length && j < dep.length) {
			if(arr[i] < dep[j]) {
				need += 1;
				i++;
				if(need > result) {
					result = need;
				}
			} else {
				need -= 1;
				j++;
			}
		}

		return result;
	}

}

第二题(AC88%)海豚数量
public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		scanner.nextLine();

		int m = scanner.nextInt(); // life time
		scanner.nextLine();
		
		int p = scanner.nextInt();
		scanner.nextLine();
		
		int[] birth = new int[p];
		for(int i=0; i<p;i++) {
			birth[i] = scanner.nextInt();
			scanner.nextLine();
		}
		
		int x = scanner.nextInt();
		
		int[] ages = new int[m+1];
		ages[0] = 1;
		
		for(int k=0; k<x; k++) {
			for(int i=m; i>0; i--) {
				ages[i] = ages[i-1];
			}
			ages[0] = 0;
			for(int bir : birth) {
				ages[0] = ages[0] + ages[bir];
			}
		}
		
		int res = 0;
		for(int i=0; i<=m; i++) {
			res += ages[i];
		}
		res = res * n;

		System.out.println(res);
		scanner.close();
	}
	
}

第三题(AC)字符串校正
public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		String[] corrects = {"surprise", "happy", "ctrip", "travel", "wellcome","student","system","program","editor"};
		
		while(scanner.hasNextLine()) {
			String word = scanner.nextLine();
			if(word == null || word.length() == 0) {
				break;
			}
			
			boolean hasWord = false;
			for(String correct : corrects) {
				if(correctFunc(word, correct)) {
					System.out.println(correct);
					hasWord = true;
					break;
				}
			}
			
			if(!hasWord) {
				System.out.println("null");
			}
		}
		
		scanner.close();
	}

	private static boolean correctFunc(String word, String correct) {
		int line = word.length();
		int col = correct.length();
		
		int[][] dp = new int[line][col];
		dp[0][0] = word.charAt(0) == correct.charAt(0) ? 0 : 1;
		String word0 = String.valueOf(word.charAt(0));
		for(int i=1; i<col; i++) {
			if(word.charAt(0) == correct.charAt(i)) {
				if(correct.substring(0, i).contains(word0)) {
					dp[0][i] = dp[0][i-1] + 1;
				} else {
					dp[0][i] = dp[0][i-1];
				}
			} else {
				dp[0][i] = dp[0][i-1] + 1;
			}
		}
		String correct0 = String.valueOf(correct.charAt(0));
		for(int i=1; i<line; i++) {
			if(correct.charAt(0) == word.charAt(i)) {
				if(word.substring(0, i).contains(correct0)) {
					dp[i][0] = dp[i-1][0] + 1;
				} else {
					dp[i][0] = dp[i-1][0];
				}
			} else {
				dp[i][0] = dp[i-1][0] + 1;
			}
		}
		
		for(int i=1; i<line; i++) {
			for(int j=1; j<col; j++) {
				int tmp = Integer.MAX_VALUE;
				if(word.charAt(i) == correct.charAt(j)) {
					tmp = dp[i-1][j-1];
				} else {
					tmp = dp[i-1][j-1] + 1;
				}
				dp[i][j] = Math.min(tmp, Math.min(dp[i-1][j] + 1, dp[i][j-1] + 1));
			}
		}
		
		if(dp[line-1][col-1] <= 2) {
			return true;
		}
		
		return false;
	}

}



#携程##笔试题目#
全部评论
tql,我第二题也被tm  int ac88卡半天 ,最后应该是long就好了但没来得及改 -
点赞 回复 分享
发布于 2020-04-01 21:03
楼主第二题题目的birth数组是干嘛的?没太看懂?能说明一下吗
1 回复 分享
发布于 2020-04-01 22:05
tql
1 回复 分享
发布于 2020-04-01 21:02
阿里巴巴国际站欢迎你们:https://www.nowcoder.com/discuss/388588
点赞 回复 分享
发布于 2020-04-02 20:34
同求题目
点赞 回复 分享
发布于 2020-04-02 13:44
牛逼!
点赞 回复 分享
发布于 2020-04-02 12:32
大佬平时怎么训练啊。我感觉我想不出来啊。
点赞 回复 分享
发布于 2020-04-02 09:55
阿里巴巴机会考虑吗
点赞 回复 分享
发布于 2020-04-02 09:44
都是100%吗?学习一下……这三道难度leetcode困难肯定有了。
点赞 回复 分享
发布于 2020-04-01 22:37
请问这个是什么岗位的题
点赞 回复 分享
发布于 2020-04-01 22:30
有没有完整题目
点赞 回复 分享
发布于 2020-04-01 22:17
第二题楼主思路肯定没什么问题,超时的话把递推形式改成矩阵乘法弄个快速幂试试?long如果溢出的话改成BigInteger试试?我同学做完和我讨论的我自己没做不知道数据范围,反正我也不知道行不行是我也是个菜比
点赞 回复 分享
发布于 2020-04-01 21:55
太强了
点赞 回复 分享
发布于 2020-04-01 21:39
大佬太强了
点赞 回复 分享
发布于 2020-04-01 21:28
大佬,能讲讲第一题的思路吗?这是哪种题型啊
点赞 回复 分享
发布于 2020-04-01 21:27
第二题他的birth是指海豚在那一个岁数的时候会生孩子吗😂
点赞 回复 分享
发布于 2020-04-01 21:26
跟大佬一比感觉自己菜的抠脚
点赞 回复 分享
发布于 2020-04-01 21:16
大佬
点赞 回复 分享
发布于 2020-04-01 21:14
第一题有LC类似的题吗?
点赞 回复 分享
发布于 2020-04-01 21:14
前排膜大佬
点赞 回复 分享
发布于 2020-04-01 21:13
大佬强
点赞 回复 分享
发布于 2020-04-01 21:11

相关推荐

07-02 13:52
武汉大学 golang
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
19
54
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务