华为八月份机试题总结1-0804

这些题目都是在 牛客 网上搜集的,也参考了一些大佬的代码。
对题目进行了详细的描述,并提供了输入输出示例,参考代码也更适合基础薄弱的参看。
希望大家可以一起交流学习,offer拿到手软!!!
第三题没找到具体的输入输出,希望考过的大佬补充一下细节
感觉和leetcode的652有点相似
/*
华为的机试题0804-1:
题目: 岛屿的最大面积 
输入: 
3 4  //注意是列和行  
0 0 0 
1 1 0 
0 0 1
1 1 1
输出:4
*/ 
#include<bits/stdc++.h>
using namespace std;


int dfs(vector<vector<int>> &graph, int i, int j)
{
	if(i<0 || i>=graph.size() || j<0 || j>=graph[0].size() || graph[i][j] == 0)
	{
		return 0;
	}
	graph[i][j] = 0;
	return 1 + dfs(graph, i+1, j) + dfs(graph, i-1, j) + dfs(graph, i, j+1) + dfs(graph, i, j-1);
}

int main()
{
	int max_area=0;
	int row, col;
	cin>>col>>row;
	vector<vector<int>> graph(row, vector<int>(col, 0));
	for(int i=0; i<row; i++)
	{
		for(int j=0; j<col; j++)
		{
			int a;
			cin>>a;
			graph[i][j] = a;
		}
	 }
	 for(int i=0; i<row; i++)
	 {
	 	for(int j=0; j<col; j++)
	 	{
	 		if(graph[i][j] == 1)
	 		{
	 			int area = dfs(graph, i, j);
	 			max_area = max(area, max_area);
			 }
		 }
	  }
	  cout<<max_area<<endl; 
	return 0;
 } 
/*
华为的机试题0804-2:
题目: 爬电梯从第N层到第M层。规则:只能向下一层一层的爬或向上N*i的坐电梯。求从N到M的最小时间 
输入: 
5 7
输出:3 
*/ 
#include<bits/stdc++.h>
using namespace std;

int main()
{
	int N, M;
	cin>>N>>M;
	if(M<N)  //因为向下只能一层一层的爬 
	{
		cout<<N-M<<endl;
		return 0;
	}
	//接下来考虑向上的情况dp[i]表示从N都第i层所花费的最少时间。
	//因为最后往上只能是
	vector<int> dp(M+1, 0); //便于和楼层对应,dp[0]不用 
	for(int i=1; i<=N; i++)  // 小于等于N层的只能往下走,因此初始化为N-i 
	{
		dp[i] = N-i;
	}
	for(int i=N+1; i<=M; i++)  //大于N层的,只能做电梯 
	{
		if(i%2==0) //直接做电梯一步到达
		{
			dp[i] = dp[i/2]+1; 
		 } 
		 else //先坐到i+1层,再往下走一层
		 {
		 	dp[i] = dp[(i+1)/2]+2; 
		} 
	}
	cout<<dp[M]<<endl; 
	return 0;
 } 



#华为机试##笔经#
全部评论
第二题爬电梯是不是有点问题。我没见过原题,如果向上可以做N*i层的话,那么 5层做到22层你的算法就是5-4-3-6-12-11-22,而实际应该是5-25-24-23-22更短吧。
点赞 回复 分享
发布于 2021-08-11 11:18

相关推荐

10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
10-29 07:51
已编辑
泰山学院 Java
双非鼠不想认输:二本有阿里的实习吗?这不是乱杀
点赞 评论 收藏
分享
10 66 评论
分享
牛客网
牛客企业服务