矩阵报数

题目:
给出一个旋转矩阵,M行N列,左上角为(0,0),右下角为(M-1,N-1),从左上角开始计数,顺时针从外圈开始,外圈遍历完之后再遍历内圈,直到遍历完所有的点。
返回所有个位数为7且十位数为奇数的坐标,10 <= M,N <= 1000,当输入不合法的时候返回空数组。

输入 M,N
10 10
输出
[[7,9],[1,1],[8,2],[7,5],[4,4]]

分析:题目不难理解,剑指offer上面题目的变种,判断一下是否合法,合法就加入结果集。
但是我一直卡在70%,一开始以为是超时,后来做完看牛客才知道原来题目中说的10 <= M,N <= 1000不是输入数据的大小而是如果数据超过这个范围要返回空数组。
看来是题目做少了,没想明白门道,我还一直在想怎么会超时。

    public static void main(String[] args){Scanner scan = new Scanner(System.in);int m = scan.nextInt();int n = scan.nextInt();int left = 0;int right = n-1;int up = 0;int down = m-1;int index = 1;List<int[]> res = new ArrayList<>();//记得判断一下数据范围while(n >= 10 && m >= 10 && n<= 1000 && m <= 1000){for(int i=left;i<=right;i++){if(check(index))res.add(new int[]{up,i});index++;}up++;if(up > down)break;for(int i=up;i<=down;i++){if(check(index))res.add(new int[]{i,right});index++;}right--;if(left > right)break;for(int i=right;i>=left;i--){if(check(index))res.add(new int[]{down,i});index++;}down--;if(up > down)break;for(int i=down;i>=up;i--){if(check(index))res.add(new int[]{i,left});index++;}left++;if(left > right)break;}System.out.print('[');for(int i=0;i<res.size();i++){int[] tmp = res.get(i);System.out.print('[');System.out.print(tmp[0]);System.out.print(',');System.out.print(tmp[1]);System.out.print(']');if(i!=res.size()-1)System.out.print(',');}System.out.print(']');}public static boolean check(int index){if((index%10 == 7) && (((index/10)&1) == 1))return true;return false;}

二叉树的个数

题目:给出一个数组,数组中的元素代表二叉树中一个节点的深度,求这个数组能够组成多少种二叉树。结果可能很大,需要mod(10^9+7)

输入 第一行为一个数组,代表元素个数,第二行为一组数据
4
0 1 2 2

分析:这道题的思路是先判断当前层有最多有多少个节点,然后看一下数组中当前层的节点个数,根据排列组合公式累乘。
解法不难,一直卡在50%,以为是溢出的问题,把所有数据改成long,还是50%,后来看牛客才知道原来输入数据可能构不成一颗二叉树,这个时候要返回0,比如有一层节点个数为0,有一层节点个数超出了上限。
看来还是题做少了,华为就喜欢搞这种奇奇怪怪的输入输出。

public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] nums = new int[n];for(int i=0;i<n;i++){nums[i] = in.nextInt();}System.out.println(getRest2(nums));
}private static long getRest2(int[] nums) {long max = nums[0];HashMap<Integer,Integer> map = new HashMap<>();for(int now:nums){map.put(now,map.getOrDefault(now,0)+1);max = Math.max(max,now);}int pre = map.get(0);if(pre != 1)return 0;long res = 1;for(int i=1;i<=max;i++){int now = map.get(i);//判断一下非法情况if(now == 0 || now > pre*2)return 0;res = res*getNum(now,pre*2)%MOD;pre = now;}return res;
}private static long getNum(int m, int n) {long num1 = 1;long num2 = 1;for(long i=n-m+1;i<=n;i++){num1=num1*i%MOD;}for (long i=1;i<=m;i++){num2 = num2*i%MOD;}return num1/num2;
}

俄罗斯方块

题目:
俄罗斯方块。给定字符串frame和brike,frame类似2202这种,表示长为4,高为2,2,0,2的方块(每个方块的单位为1,该位是2就是两个堆在一起),brike类似121,表示长为3,高为121的方块(多的那个向下)。如果一行被填充满了即可消除掉。问给定了两个字符串之后,最后剩下的最小行数是多少。
(题干来自于牛客作者zshunyi,原贴)

输入 第一行表示底部每一列的高度,第二行表示方块每一列的高度,都是向下凸的。
2202
2
输出 表示剩余的最小行数
0

分析:就模拟,听说测试用例比较弱。不过我只过了70%不知道哪里有问题。
这里贴一份大佬cuber~的代码,代码来源。

int helper(vector<int>& frame, vector<int>& brick)
{int frame_n = frame.size(), brick_n = brick.size();int res = 1000000;for (int i = 0;i < frame_n - brick_n + 1;i++){int max_h = 0, total_max_h;for (int j = 0;j < brick_n;j++)max_h = max(max_h, brick[j] + frame[i + j]);total_max_h = max_h;int r = 100000;for (int j = 0;j < frame_n;j++){total_max_h = max(total_max_h, frame[j]);if (j < i)r = min(r, frame[j]);else if (j >= (i + brick_n))r = min(r, frame[j]);else{int tmp1 = frame[j], tmp2 = brick[j - i];if (tmp1 + tmp2 == max_h)r = min(r, max_h);elser = min(r, tmp1);}}res = min(res, total_max_h - r);}return res;
}int main()
{string s1, s2;cin >> s1 >> s2;vector<int> frame(s1.size()), brick(s2.size());for (int i = 0;i < s1.size();i++) frame[i] = s1[i] - '0';for (int i = 0;i < s2.size();i++) brick[i] = s2[i] - '0';cout << helper(frame, brick);return 0;
}

后记

上周华为的笔试感觉好像简单一些,可惜没能参加,那天晚上面的PCG还把我挂了,真难受。
昨天晚上5点的时候,腾讯发邮件叫我晚上8点面试,和华为笔试撞上了就调到了周五晚上。结果没想到过了一夜,先是美团发邮件说周六下午笔试,然后11点时候腾讯发邮件说周日晚上8点笔试,最后今天滴滴发邮件说周五晚上笔试。
关键是滴滴的第二批笔试都到9月中了,没办法,又联系hr改腾讯的面试时间。
淦,为什么你们都喜欢挤在一起啊,雷火这边约了明天早上面试,这次应该是hr面了吧,有道还是没消息。
秋招真难,希望晚上腾讯不要凉的太快。


Seeker的奇妙求职历险(华为笔试)相关推荐

  1. Seeker的奇妙求职历险(腾讯医疗一面和网易有道一面)

    前言 没想到PCG一面挂了之后被CSIG的医疗部门捞了,又面了一次,面完之后状态是显示等待复试,但是一直没消息,估计和阿里一样把我晾着吧. 网易有道面试感觉还算和面试官交谈甚欢,但是面完之后到现在都没 ...

  2. Seeker的奇妙求职历险(招银科技一面)

    招银科技一面 前言 Redis 缓存雪崩 集合 锁 ReentranLock 可重入锁 公平锁 读写锁 数据库 Mybatis like语句注意事项 事务 子事务如何获取注解 事务传播行为 单例模式 ...

  3. Seeker的奇妙求职冒险(杰杰的字节笔试)

    替换后的最长重复字符 力扣原题424:https://leetcode-cn.com/problems/longest-repeating-character-replacement/ 题目大意: 给 ...

  4. 华为 社招 C语言笔试,华为笔试C语言笔试题之3

    <华为笔试C语言笔试题之3>由会员分享,可在线阅读,更多相关<华为笔试C语言笔试题之3(10页珍藏版)>请在人人文库网上搜索. 1.C 语言笔试题之34. static 有什么 ...

  5. 2020.9.9华为笔试记忆:KMP+记忆化搜索+字典树

    2020.9.9华为笔试 当然,出现在我博客中的笔试都不是我自己的笔试(人家也不给我发笔试链接,小声bibi,诶,好像我也没投,hhhahahha 记者:为什么要做笔试? 我:生活无聊了喏,肯定要做啊 ...

  6. 2019华为笔试 找终点

    [算法][华为]2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数, https://blog.csdn.net/qinglingLS ...

  7. 华为笔试时发现golang ACM模式输入的一个坑

    华为笔试时发现golang ACM模式输入的一个坑 golang ACM模式常用输入方法(scan,bufio):https://zhuanlan.zhihu.com/p/551393704 问题 第 ...

  8. 【2019华为笔试】召唤师的技能——圆排列,翻转和项链排列

    题目描述: dota游戏里面,召唤师可以控制冰雷火三种元素,并通过元素组合产生新的技能.现在我们修改了张新的地图, 地图中他能够控制n种元素, 并且将m个元素围成一个圈组成一 个新技能(这m个元素通过 ...

  9. 旅行商问题(华为笔试蜜蜂采蜜问题)

    旅行商问题是算法中比较难的一类题目,也是比较综合的题目之一,其变种的题目也非常灵活,应用场景非常广泛,前段时间在做华为笔试题目的时候,遇到了一个与旅行商问题相关的蜜蜂飞行采花粉问题: 题目大意是:一个 ...

最新文章

  1. 版本控制系统 之一 概念、分类、常见版本控制系统(CVS、SVN、BitKeeper、Git 等)
  2. MVC中JSON字符长度超出限制的异常处理
  3. 不知道选择多云还是混合云?先把概念弄清楚吧
  4. Jmeter MD5加密及其运用
  5. 【redis】三种redis数据导出导入方式
  6. Kendo UI常用示例汇总(十)
  7. NET Compact Framework 与 .NET Framework 之间的差异
  8. HadoopLearning
  9. 《创新者的窘境》读书笔记
  10. Photoshop水平线快捷键怎么使用的?
  11. A Neural Algorithm of Artistic Style : Neural Style Transfer with Eager Executon
  12. React项目实现导出PDF的功能
  13. 解析SRAM存储容量及基本特点
  14. AR与VR的区别在哪?
  15. 企业级自动化运维工具-ansible
  16. 【学习点滴】linux调试工具、cmake和网络抓包
  17. 工作常用的工具类JS+reset.css
  18. excel仪表盘_免费的Excel仪表板工具
  19. 贴片电阻电容封装尺寸对照(转)(主要为了看电阻封装尺寸与功率关系)
  20. excel计算机二级考试试题,全国计算机等级考试二级officeexcel真题

热门文章

  1. 阿里云VPC网络内网实例通过SNAT连接外网
  2. imagej批量处理图片
  3. 可充电电池安规认证标准、GB 9706.1-2020对医用电气设备中电池的要求
  4. WebApi编程(一)-DOM
  5. 写一个PE的壳_Part 3:Section里实现PE装载器
  6. Java练手项目实战——五子棋游戏实现思路及源码
  7. 在Deepin 15.11系统中遇到微信版本过低不能登录的解决方法
  8. vue在线预览excel
  9. MT6737芯片尾缀资料介绍
  10. 微信小程序最新获取头像以及昵称方法