华为八月份机试题总结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 66 评论
分享
牛客网
牛客企业服务