刚完事的快手笔试题

主要是最后一道,题目大意是给一个字符串[[.,.,.,*,*],[*,*,*,*,*],[*,.,*,*,.]],其中.表示可用工位,*表示不可用工位,要求两个相邻的可用工位只有一个可用,问最后有几个可用工位
思路是,先将字符串转换为字符数组,然后判断是否有相邻可用的工位(包括上下相邻,左右相邻),如果有则将其相邻工位变为不可用状态,最后统计矩阵中所有可用工位数即可
代码如下
package Test;

import java.util.Scanner;

public class Text3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String a =new String();
		a=sc.next();
		char[] b=a.toCharArray();
		
		int m=0;//行数
		for(int i=0;i<b.length;i++) {
			if(b[i]==']')
				m++;
		}
		m=m-1;
		
		int n=0;//列数
		for(int i=0;i<b.length;i++) {
			if(b[i]==',')
				n++;
		}
		n=(n+1)/m;
		
		char[][] c=new char[m][n];//标准矩阵
		
		int p=0;//列指针
		int q=0;//行指针
		for(int i=0;i<b.length;i++) {
			if(b[i]=='*'||b[i]=='.') {
				c[q][p]=b[i];
				if(p<n-1)
					p++;
				else if(q<m-1){
					q++;
					p=0;
				}
			}
		}
		
		for(int i=0;i<m-1;i++) {
			for(int j=0;j<n-1;j++) {
				if(c[i][j]=='.') {
					c[i][j+1]='*';
					c[i+1][j]='*';
				}
			}
		}
		int G=0;//最大员工数
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
				if(c[i][j]=='.')
					G++;
			}
		}
		System.err.println(G);
		
	}
}



很难受的是我交的时候还没有这么完善,我当时只考虑了3个相邻的情况,忘记考虑2个相邻的情况(我也没注意到,给的两个测试示例都跑通了,那还正好是3个相邻的情况,没有2个相邻的情况)
提交上去发现测试用例一个没过,我瞬间就懵了,啥玩意啊?咋回事啊?这咋办啊?
结果我检查了半天,还是没想起来忘考虑啥了
最后我神奇的在代码下注释写了自己的思路过程以及疑惑,并表示我没有错,错的是世界(JOJO我不做人啦!)
现在再想想好想找个地缝钻进去(大佬我错了)。
#快手笔试##快手##笔试题目#
全部评论
[..][.*]的结果就不对吧
点赞 回复
分享
发布于 2020-04-12 18:38
求问第三题的思路是啥?
点赞 回复
分享
发布于 2020-04-12 18:43
滴滴
校招火热招聘中
官网直投
我也是这个思路,不过补充了一下。每次扔到*就新开一个二维数据让它找。然后返回最大值。差不多O(N^4)
点赞 回复
分享
发布于 2020-04-12 19:01
老哥,你知道快手hr的联系方式吗?,我错过了笔试,想再去求求hr😭😭
点赞 回复
分享
发布于 2020-04-12 19:40
这个题我直接建立了个二维TF数组开始敲,5分钟写完连调试也没有调试直接AC,但是二三题做得一般
点赞 回复
分享
发布于 2020-04-12 21:01
请问快手,做对多少可以过笔试?
点赞 回复
分享
发布于 2020-04-12 21:37

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
2 2 评论
分享
牛客网
牛客企业服务