4.14 完美世界笔试凉凉 只有2AC

感觉这次笔试不是很难,但是奈何做的题太少,还是有俩到没做出来 哎。。。

第一题:求承载所有人做少需要的船数量
看到这道题第一个给我的直觉就像是跟二数之和相似的思路。想达到最少的船数量,最好的办法就是一个小的体重匹配一个大的体重,因为如果俩个小体重的人坐一个船,就浪费了很多承载空间。
所以按照这个思路,先排序,然后定义俩个指针,左指针指向第一位,右指针指向最后一位,然后相加,sum 大于 limit,说明这俩个人无法坐一个穿,所以就把右指针向左移动一位,因为如果移动左指针,只会使得sum更大。如果sum < = limit, 说明这俩个人可以坐一个船,于是标志这俩人已经被承载,并且把右指针往左移动一位,左指针往右移动一位。重复以上循环直到左指针不比右指针小。
代码如下:
package Testing;
import java.util.*;


import javax.xml.soap.Node;
public class Main 
{
	public static void main(String [] args)
	{
		Scanner scan = new Scanner(System.in);
		String input= scan.nextLine();
		int limit = Integer.parseInt(scan.nextLine());
		
		String [] weightArr = input.split(" ");
		int [] weights = new int[weightArr.length];
		for(int i = 0; i < weightArr.length; i++)
		{
			weights[i] = Integer.parseInt(weightArr[i]);
		}
		Arrays.sort(weights);
		int[] mark = new int[weightArr.length];
		int left = 0;
		int right = weights.length - 1;
		int minimum = 0;
		while(left < right)
		{
			int first = weights[left];
			int second = weights[right];
			int sum = first + second;
			if(sum <= limit)
			{
				mark[left] = 1;
				mark[right] = 1;
				left++;
				right--;
				minimum++;
			}
			else
				right--;			
		}
		for(int result : mark)
		{
			if(result == 0)
				minimum++;
		}
		System.out.print(minimum);
		
		
	}
	

}
第二题:典型的最短路径题,然而做的时间太久,忘记怎么做了。。。哎痛苦

第三题:纸盒嵌套问题:感觉挺难的不会,但是思路我觉得大概是要按照长先排序,然后进一步操作,还请各位大佬分享一些思路。

第四题:这题背过,是背包问题,用DP解,不难
代码如下:
package Testing;
import java.util.*;


import javax.xml.soap.Node;
public class Main 
{
	public static void main(String [] args)
	{
		Scanner scan = new Scanner(System.in);
		int number = scan.nextInt();
		int capacity = scan.nextInt();
		int[] weight = new int[number + 1];
		int[] value = new int[capacity + 1];
		
		int[][] dp = new int[number + 1][capacity + 1];
		
		for(int i = 1; i < number; i++)
			weight[i] = scan.nextInt();
		for(int i = 1; i < number ; i++)
			value[i] = scan.nextInt();
		for(int i = 1; i <= number; i++)
		{
			for(int j = 0; j <= capacity; j++)
			{
				dp[i][j] = dp[i - 1][j];
				if(j >= weight[i])
				{
					dp[i][j] = Math.max(dp[i][j], dp[i -1][j - weight[i] + value[i]]);
				}
			}
		}
		int max = 0;
		for(int i = 0; i <= number; i++)
		{
			max = Math.max(max, dp[number][i]);
		}
		System.out.print(max);
		
	}
	

}



#完美世界笔试##Testin云测#
全部评论
第三题套信封,也是用dp做。第一题我暴力直接过只有80,看了你的思路终于找到原因了。 第三题我的代码:
1 回复 分享
发布于 2020-04-14 21:10
怎么我做的题目和这不一样啊
点赞 回复 分享
发布于 2020-04-25 13:47
完美世界怎么投啊是发HR邮箱吗
点赞 回复 分享
发布于 2020-04-16 10:29
第三个,重写比较器,先按照长升序再按照宽升序,只过了80🙃
点赞 回复 分享
发布于 2020-04-14 21:07

相关推荐

不愿透露姓名的神秘牛友
06-19 14:46
和女友两个人马上毕业,现在我在鹅实习995,周六日偶尔也去北京;她在北京金融007,经常忙到后半夜,周末也没啥休息机会两个人现在都不咋聊天了,一句话隔半小时甚至半天才回。&nbsp;她是个很优秀的妹子,工作也很努力,是值得学习一辈子的人。我在努力工作求转正,即便不行至少赚到了一段不错的实习经历。已经异地了半年,接下来可能还会持续是这个状态。我们都算是对方重要的人,只是感觉看上去不是很有未来的样子。希望牛友们给点的鼓励
梦旅奇缘:很难。异地首先就已经很难了,加上妹子是金融行业,忙碌高压,对情感需求很高,而且见惯纸醉金迷,你的很多优势在她那里可能就不算什么了。这种情况下,在她们那里遇到一个能及时照顾她的人,即使那人可能很多条件不如你,你也有可能被分手。 说白了,两个卷王就不太适合在一起。因为卷王最大的优势,在另一个卷王那里就不算优势了。
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
1
9
分享

创作者周榜

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