一位上了一个大的互联网公司笔试题分享

声明:

首先声明,我没有参加中考(我的老男人)。我只是道听途说。这个测试题是否真的存在?谁知道!

在这一点,但想分享一些知识。

有关文字说明原来的问题:

给定一个二维数组,里面随机的填写0和1。求取把上下左右连续(斜线不算相连)的1周边0的个数。

在这里能够把由1构成数据看成一个岛屿,求岛屿海岸线的长度,即周边0的个数。

引子:

看过人机博弈-吃子棋游戏(二)算气的博友,应该瞬间就有思路了吧。事实上围棋的算气,在没有眼位的情况下,就是计算算实心岛屿的海岸线。在有眼位的情况下。围棋算气也是计算空心岛屿内部的海岸线长度和外部海岸线长度。什么是围棋的眼位,请百度之。我们不继续讨论围棋的眼位了。

解决思路:

我并不知道具体的题目,所以对于此题空心岛屿的内部海岸线长度是否须要特殊处理无从知晓。只是。在算气的时候检測是否存在眼位并不难,加标示就可以。假设确实是包括空心的岛屿。即形成眼位的围棋,我们能够进行特殊处理。我们仅仅要将总气数扣除内部眼位的气数就ok了,怎么扣除是个问题。

在这里,我说个思路,不一定够好,但能够解决这个问题。

1.确定内部海岸线的最小包围盒(这里有可能存有外部海岸线,但能够排除大部分外部海岸线),能够节省非常多运算。

2.检測包围盒内海岸线点能否够抵达包围盒的曼哈顿距离最短的边界,假设能够抵达。且与之相连接的海岸线上的点均可抵达,它们都是外部海岸线。

3.否则,假设无法走至包围盒的此边界。则证明其被包围。属于内部海岸线,且与之相连的点均属于内部海岸线。

4.根据上述方法检測包围盒内部的不反复的全部点,就可以得出哪些是内部海岸线。

我们知道这个算法效率不高(配合最小包围盒。以及连通点性质同样。实际上寻路的次数应该非常少)。但它是正确的,被包围的海岸线内部的点,就像困在岛屿里的小怪物,永远无法逃出来。

而外部海岸线上的点只会觉得岛屿是个障碍物而已。

这个算法能够处理随意复杂的图形,就算山路18弯,外部点也会历经周折到达海岸线,空心岛有好多空心。也不会搞错内部点or外部点。

针对第二点用深度优先搜索或是Astar算法均能够,我们目的是找到路即可。而不是找到最短的路。

总结:

我发博文的时候,并没有把围棋中算气算法抽象成为一个 1,0笔试题。

大胆推測一下,或许出题人正是看到相关博文,才萌生了出此题的想法。

我想在CSDN上应该有一部分人更关注笔试题面试题相关的内容,而忽略了本有实质性内容而不是针对笔试题的文章。希望大家可以从各种博客中提取出抽象的知识。以不变应万变。

假设你有更好的思路,能够留言讨论下。

再补充一个样例,非常久曾经我參加某公司笔试,遇到一题例如以下,给定一个数组,数组中的数值是随机的且乱序的。要求把偶数排在数组的前面,奇数排在数组的后面。还希望你的算法时间复杂度尽量低。能够使用C/C++语言作答。

你怎么看这到题。假设你瞬间就有极好的方法。我得恭喜您。由于几年前的我确实想了非常长时间才写出了正确但时间复杂度比标准答案略高的代码。后来阅读一些资料,说标准答案使用首尾两个指针解决问题。恩,今天我要说的是,标准答案该更新了。或是题目该加以很多其它限制了。看了代码你就明确了。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     vector<int> nums{1,2,3,4,5,6,7,8,9,10};
 7     random_shuffle(nums.begin(),nums.end());
 8     partition(nums.begin(),nums.end(),[](int ele)->bool{return ele%2==0;});
 9     for(auto& ele:nums){cout<<ele<<" ";};
10     cout<<endl;
11 }

只10行代码。包含一切。

只第8行代码,就完毕这道题。

哈哈,我不希望出题人看见这篇博客。由于或许他会无德的在题目后面加上一句话禁止使用STL。

而假设你是即将參加笔试的小同志,记得带上STL攻城利器, 让守城的人亮瞎双眼。

请放心,没有什么,如何优化代码的问题。非常困难(但它仍然是可能。一些很专业的问题。但是,这是一般不会有问题,现在面临的问题)在性能上STL。首先,水平的问题,人们如何与STL作家比。第二,C++优化编译器更懂STL,而不是你的代码。

时间: 2024-11-14 23:59:42

一位上了一个大的互联网公司笔试题分享的相关文章

一道某高大上互联网公司的笔试题分享

声明: 首先声明,我没有参加此次考试(吾老矣),我只是道听途说,是否真的存在这道试题呢?谁知道呢!在此仅仅是想向大家分享一些知识. 原题大概描述: 给定一个二维数组,里面随机的填写0和1,求取把上下左右连续(斜线不算相连)的1周边0的个数.在这里可以把由1构成数据看成一个岛屿,求岛屿海岸线的长度,即周边0的个数. 引子: 看过人机博弈-吃子棋游戏(二)算气的博友,应该瞬间就有思路了吧.其实围棋的算气,在没有眼位的情况下,就是计算算实心岛屿的海岸线.在有眼位的情况下,围棋算气也是计算空心岛屿内部的

asp.net 部分面试问题总结(附答案),比大篇幅的笔试题管用

这次面试遇到的一些问题有很基础,也有的一些我没有听过.根据经验不同或应聘职位和公司的不同等,遇到的面试问题肯定也不一样.本人系个女程序员,两年半asp.net开发经验,这是我年后应聘asp.net工程师遇到的问题,进行了一些简单整理和总结,我觉得跟网上大篇幅的题目还更有用,发出来供大家参考,希望不要吐槽,有什么问题各位大神可以指导一下我.第一次写博客,希望有人支持一下..... 1.JS遍历:each(),for,foreach2.MCV局部视图:@Html.Action,@Html.Parti

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

1 package digitAddTogither; 2 3 /** 4 * Created by ZKY on 2017-08-15 01:00. 5 * 给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数. 6 * 样例 7 * 给出 num = 38. 8 * 相加的过程如下:3 + 8 = 11, 9 * 1 + 1 = 2. 10 * 因为 2 只剩下一个数字,所以返回 2. 11 */ 12 public class DoMain 13 { 14 /**

Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量

转自:http://yanyiwu.com/work/2015/01/04/Haystack.html 一篇14页的论文Facebook-Haystack, 看完之后我的印象里就四句话: 因为[传统文件系统的弊端] 因为[缓存无法解决长尾问题] 所以[多个图片信息(Needle)存在同一个文件(SuperBlock)中] 所以[显著提高性能] 传统文件系统的弊端 传统的 POSIX 文件系统不适合高性能的图片存储, 主要原因是基于该文件系统来存储的话,是讲每个图片存储成某目录下的一个文件, 每次

怎样计算一个整数的位数&amp;并把每一位上的数字保存下来

用循环来解决~~ M每次除以10, 再用一个变量count来计数,每循环一次 加1,直到这个数除去10后的数小于10 ,count再加1就可以了 实例:整数M=4325, 第一次:4325/10=432,M结果不为0,cout=1; 第一次:432/10=43,M结果不为0,cout=2; 第三次:43/10=4,M结果不为0,count=3; 第四次:M为4,结果不为0,count=4;但是M/10为0,循环结束了 至于保存一个整数的每一位数,我们可以用最常规的方法,用取模(%)和相除(/)连

在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(i==j||i+j==9) { y[i][j]='*'; } else { y[i][j]='#'; } } } for(int i =0;i<10;i++) { for(int k

NASNet学习笔记——?? 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; ?? 核心二:采用resnet和Inception重复使用block结构思想; ?? 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transferable Architectures for Scalable Image Recognition> 注 ??先啥都不说,看看论文的实验结果,图1和图2是NASNet与其他主流的网络在ImageNet上测试的结果的对比,图3是NASNet迁移到目标检测任务上的检测结果,从这图瞬间感觉论文的厉害之处了,值

面试官:请你实现一个大文件上传和断点续传

前言这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding 的编程题,当时虽然思路正确,可惜最终也并不算完全答对 结束后花了一段时间整理了下思路,那么究竟该如何实现一个大文件上传,以及在上传中如何实现断点续传的功能呢? 本文将从零搭建前端和服务端,实现一个大文件上传和断点续传的 demo 文章有误解的地方,欢迎指出,将在第一时间改正,有更好的实现方式希望留下你

如何成为一位牛逼的大咖

每个人都想过做一件牛逼的事情,做一个牛逼的项目,或者想成为一个牛逼的大咖.甚至我们还不懂到底什么是大咖,所谓的"大咖"其实就是在某个领域有这一定影响力,拥有众多的粉丝和号召力的人.如果想成为一位牛逼的大咖,那么你必须在某个领域有着自己的独有的价值.做大咖很多人以为会很舒服,人只要出了名什么好事都会轮到他.不但会获得很多的社会资源还有很多的商业价值.所以,能成为一位牛逼的大咖说明已经非常成功了,就是不操作什么项目也活得相当滋润了.很多人把我当成了大咖来向我讨教经验,其实我也不是什么大咖,