现实中的算法面试题(已拿Offer)赚到了,赚到了
算法面试题
阅读目录
- 写在前面
- 算法百科
- 算法题目
- 参考答案
- 博客总结
博客前言
有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以看一看)。所以一直没时间整理博客,这段时间周末终于闲下来,就趁着周末就记录了几个面试过程中碰到的算法题。
本篇博客不打算介绍那些高逼格的算法(如winnow,bagging,ada boost等等),就讲讲最近在面试过程中遇到的算法题以及面试的时候给出的答案(出场率比较高的算法题我都列出来了,其他的就不说了)。算法可以说是解决所有问题的基石。很多东西都可以转换为算法问题,学习算法最大的作用就是更清楚地了解了很多东西。正所谓是,知其然更知其所以然。很多人都觉得程序就是数据结构+算法+适当的注释。不学算法,那就不要学编程了。虽然说可能没这么夸张,因为实际上还是有很多小项目是不需要太多算法的,都是代码一个劲的往上叠加就行了。但是就算没那么夸张,但是作为一个程序员,逻辑思维就是算法的思路还是很重要的。---这段话是某公司一个面试官说的。
写在前面
再次重申一下,这里只是列出一些最近遇到的算法面试题,拿出来给大家分享一下面试经历(仅是常见算法方面的经历,还有一些不常见的就懒得列举了,技术方向的不介绍)。还有就是我的答案。ps:无论是算法题还是答案都不具任何代表性也并非是正确答案,仅仅是我面试的时候给出的答案,只是分享而已。另外,对于我所列出的问题以及给出的答案,如果有园友有疑议或者是更好的解决办法,那就分享出来! 写算法是一个非常过瘾的享受!
顺便说一嘴,因为有一次面试面试官是在伦敦,所以只能远程面试,我们是用collabedit,这个东东还是很受用的。
算法百科
----算法百科摘自百度百科(ps:不摘点介绍性的文字在这,直接开门见山的来题目。感觉有点duangduang的。性急的可以直接跳过此处!)
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。 形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。
算法题目
- 第一题:在一个已经排序的Int数组中,查找某个number,如果存在这个number,返回在数组的位置,反之返回-1 查看博主面试答案
- 第二题:{"12,bob","3,sky","6,cool","1,good","22,go"},按元素第一列排序 查看博主面试答案
- 第三题:字符串数组去除重复项 查看博主面试答案
- 第四题:将一个未排序的整形数组进行归置,数组中的负数移动到数组的左边,正数移动到数组的右边。0不动(ps:我一开做这题就打算用无脑排序搞定,结果我才开始写,面试官就说了"这里需要提示一下,移动后的数组只是负数在左,正数在右。不一定非要用传统的排序,如果不是传统的排序可以加分。")
所有答案仅供参考,并非标准或者正确答案,只是在面试的时候给出的答案而已,所以欢迎大家给出更好的答案
所有答案都是面试的时候notepad写的,回来以后我没有double check,直接贴出了代码,其中有一部分我后面附加了图。如果大家有兴趣,我也建议大家可以先用notepad写写看,因为算法这种东西本身就是一个思路而已。没必要用vs。
参考答案
第一题
//------------------------------------------------------------------------------
// <copyright file="Runner.cs" company="CNBlogs Corporation" owner="请叫我头头哥">
// Copyright (C) 2015-2016 All Rights Reserved
// 原博文地址: http://www.cnblogs.com/toutou/
// </copyright>
//------------------------------------------------------------------------------
namespace TestApp
{using System;using System.Collections.Generic;using System.Text.RegularExpressions;class Runner{static void Main(string[] args){int[] arr = { 3, 5, 6, 7, 8, 9, 14, 23, 45, 56, 63, 72, 87, 91, 92, 93, 95, 97, 98, 534, 555, 676, 878, 988, 1365 };int number = 555;int result = Search(arr, number);Console.WriteLine(result);Console.ReadKey();}public static int Search(int[] arr, int number){int result = 0;if (arr == null || arr.Length == 0 || number > arr[arr.Length - 1] || number < arr[0]){result = -1;}else{result = Bisearch(arr.Length - 1, arr, number);}return result;}public static int Bisearch(int endIndex, int[] arr, int number, int startIndex = 0){int result = 0;if ((endIndex - startIndex) < 2){for (int i = startIndex; i <= endIndex; i++){if (arr[i] == number){result = i;break;}else{result = -1;}}}else{if (arr[startIndex] <= number && number <= arr[(endIndex + startIndex) / 2]){Bisearch((endIndex + startIndex) / 2, arr, number, startIndex);}else{Bisearch(endIndex, arr, number, (endIndex + startIndex) / 2 + 1);}}return result;}}
}
参考答案
第一题
//------------------------------------------------------------------------------
// <copyright file="Runner.cs" company="CNBlogs Corporation" owner="请叫我头头哥">
// Copyright (C) 2015-2016 All Rights Reserved
// 原博文地址: http://www.cnblogs.com/toutou/
// </copyright>
//------------------------------------------------------------------------------
namespace TestApp
{using System;using System.Collections.Generic;using System.Text.RegularExpressions;class Runner{static void Main(string[] args){int[] arr = { 3, 5, 6, 7, 8, 9, 14, 23, 45, 56, 63, 72, 87, 91, 92, 93, 95, 97, 98, 534, 555, 676, 878, 988, 1365 };int number = 555;int result = Search(arr, number);Console.WriteLine(result);Console.ReadKey();}public static int Search(int[] arr, int number){int result = 0;if (arr == null || arr.Length == 0 || number > arr[arr.Length - 1] || number < arr[0]){result = -1;}else{result = Bisearch(arr.Length - 1, arr, number);}return result;}public static int Bisearch(int endIndex, int[] arr, int number, int startIndex = 0){int result = 0;if ((endIndex - startIndex) < 2){for (int i = startIndex; i <= endIndex; i++){if (arr[i] == number){result = i;break;}else{result = -1;}}}else{if (arr[startIndex] <= number && number <= arr[(endIndex + startIndex) / 2]){Bisearch((endIndex + startIndex) / 2, arr, number, startIndex);}else{Bisearch(endIndex, arr, number, (endIndex + startIndex) / 2 + 1);}}return result;}}
}
关于这题我在面试回来的路上,构思了一下思路,大致是这样的:
当然,我这个肯定不是最好的solution。
第二题
namespace TestApp
{using System;using System.Text.RegularExpressions;class Program{static void Main(string[] args){string[] source = new string[] { "12,bob", "3,sky", "6,cool", "1,good", "22,go" };for (int i = 0; i < source.Length; i++){for (int j = i; j < source.Length; j++){if (Convert.ToInt32(Regex.Match(source[i], @"\d+").Value) > Convert.ToInt32(Regex.Match(source[j], @"\d+").Value)){string temp = source[i];source[i] = source[j];source[j] = temp;}}}for (int i = 0; i < source.Length; i++){Console.WriteLine(source[i]);}}}
}
这一题我选择的是用比较笨的正则取出数字,然后用冒泡排序完成的算法。后来回来想了想,实在是不应该啊!这里就上一张传统的冒泡排序视觉效果图。
第三题
namespace TestApp
{using System;class Program{static void Main(string[] args){string[] source = { "aaa", "bbb", "aaa", "ccc", "bbb", "ddadd", "ccc", "aaa", "bbb", "ddd" };foreach (var item in ArrDistinct(source)){Console.WriteLine(item);}}public static String[] ArrDistinct(string[] source){if (source != null && source.Length > 0){Array.Sort(source); int size = 1; for (int i = 1; i < source.Length; i++)if (source[i] != source[i - 1])size++;string[] tempArr = new string[size];int j = 0;tempArr[j++] = source[0];for (int i = 1; i < source.Length; i++) if (source[i] != source[i - 1])tempArr[j++] = source[i];return tempArr;}return source;}}
}
第四题
public int[] IntArrSort(int[] source){if (source == null || source.Length == 0)return source;int rightIndex = source.Length - 1, tempNumber = 0;for (int i = 0; i < source.Length; i++){if (i > rightIndex)break;if (source[i] <= 0){continue;}else if (source[i] > 0){for (int j = rightIndex; j >= 0; j--){if (source[j] < 0){tempNumber = source[j];source[j] = source[i];source[i] = tempNumber;rightIndex = j;break;}}}}return source;}
博客总结
各位道友,以上所有的算法面试题都是我平常在面试中积累下来的,出场率比较高的我都列出来了(出场率只是相对我面试的经历而言)。
另外:特别说明一下,我给出的算法面试题答案可能也有错误的,只是给出我的参考意见,算法这种东西本身就没有什么标准答案可言,而且可能有些题目我的思路或者解题方式也不一样对。欢迎各位道友给出更好的答案或者解题思路,共同进步!
所有的面试题目都不是一成不变的,特别是像一线大厂,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!
现实中的算法面试题(已拿Offer)赚到了,赚到了相关推荐
- 南京地平线机器人无人驾驶算法面经--已获offer!
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 本文已获HarleysZhang授权 https://github.com/HarleysZhang/2019_al ...
- 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?
欢迎订阅本专栏:<机器学习算法面试题> 订阅地址:https://blog.csdn.net/m0_38068876/category_11810806.html [机器学习算法面试题]一 ...
- 程序员应该掌握的经典算法面试题
不忘初心,方得始终.何谓"初心"?初心便是在深度学习.人工智能呼风唤雨的时代,对数据和结论之间那条朴素之路的永恒探寻,是集前人之大智,真诚质朴求法向道的心中夙愿. 没有最好的分类器 ...
- 200 道算法面试题集锦!Python 实现,含华为、BAT 等校招真题!
点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法. ...
- prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」
欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...
- 66 道前端算法面试题附思路分析助你查漏补缺
大家好,我是漫步. 今天来分享一篇干货,前端关于算法的分析不多,下文列举了66道前端算法面试题,希望对你有所帮助. 作者:Eno_Yao https://segmentfault.com/a/1190 ...
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- 微软的100道算法面试题(终结版)
前言 数据结构与算法的重要性已不言而喻,最近,我整理出十大经典排序算法.五大常用算法总结,今天特意整理出微软面试的100题,若有不足之处,欢迎指正!由于篇幅过长,前30道题目写在上一篇,大家可以进我的 ...
- 一道亚马逊算法面试题的情景分析
阅读博客的朋友可以观看视频: http://study.163.com/course/courseMain.htm?courseId=1002942008 我们聚焦于一道亚马逊的算法面试题,通过分析该 ...
最新文章
- 生产异常反馈流程图_企业生产现场管理做到这些,想不成功都难
- 华西生物医学大数据中心俞鹏课题组博士后招聘启事
- Linux下运行.cpp文件
- php(wamp安装问题)
- javascript系列-class10.DOM(下)
- java post 提交数据_使用Post方式提交数据到Tomcat服务器的方法
- 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现
- Virtualbox中win7虚拟机中U盘不可用问题的解决
- jdbc连接云数据库mysql数据库_使用jdbc连接mysql数据库
- 如何让linux自动回收内存,linux – 什么可以导致非活动内存增加以及如何回收它?...
- nginx+php5-fpm安装
- 弱网测试用什么农_弱网测试--使用fiddler进行弱网测试
- java统计空格代码_java统计文件中字符,数字,汉字,空格数目
- ADB 环境变量配置教学
- 广州大喜事婚庆公司报价表
- 微信小程序如何获取地理位置、地图显示,逆地址解析。
- HTML5 UI 模板
- 获取windows硬件、软件信息的方法
- C语言实现成绩等级判别
- 盘点那些多倍积分的银行卡