算法面试题

阅读目录

  • 写在前面
  • 算法百科
  • 算法题目
  • 参考答案
  • 博客总结

博客前言

有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以看一看)。所以一直没时间整理博客,这段时间周末终于闲下来,就趁着周末就记录了几个面试过程中碰到的算法题。

本篇博客不打算介绍那些高逼格的算法(如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)赚到了,赚到了相关推荐

  1. 南京地平线机器人无人驾驶算法面经--已获offer!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 本文已获HarleysZhang授权 https://github.com/HarleysZhang/2019_al ...

  2. 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?

    欢迎订阅本专栏:<机器学习算法面试题> 订阅地址:https://blog.csdn.net/m0_38068876/category_11810806.html [机器学习算法面试题]一 ...

  3. 程序员应该掌握的经典算法面试题

    不忘初心,方得始终.何谓"初心"?初心便是在深度学习.人工智能呼风唤雨的时代,对数据和结论之间那条朴素之路的永恒探寻,是集前人之大智,真诚质朴求法向道的心中夙愿. 没有最好的分类器 ...

  4. 200 道算法面试题集锦!Python 实现,含华为、BAT 等校招真题!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法. ...

  5. prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  6. 66 道前端算法面试题附思路分析助你查漏补缺

    大家好,我是漫步. 今天来分享一篇干货,前端关于算法的分析不多,下文列举了66道前端算法面试题,希望对你有所帮助. 作者:Eno_Yao https://segmentfault.com/a/1190 ...

  7. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  8. 微软的100道算法面试题(终结版)

    前言 数据结构与算法的重要性已不言而喻,最近,我整理出十大经典排序算法.五大常用算法总结,今天特意整理出微软面试的100题,若有不足之处,欢迎指正!由于篇幅过长,前30道题目写在上一篇,大家可以进我的 ...

  9. 一道亚马逊算法面试题的情景分析

    阅读博客的朋友可以观看视频: http://study.163.com/course/courseMain.htm?courseId=1002942008 我们聚焦于一道亚马逊的算法面试题,通过分析该 ...

最新文章

  1. 生产异常反馈流程图_企业生产现场管理做到这些,想不成功都难
  2. 华西生物医学大数据中心俞鹏课题组博士后招聘启事
  3. Linux下运行.cpp文件
  4. php(wamp安装问题)
  5. javascript系列-class10.DOM(下)
  6. java post 提交数据_使用Post方式提交数据到Tomcat服务器的方法
  7. 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现
  8. Virtualbox中win7虚拟机中U盘不可用问题的解决
  9. jdbc连接云数据库mysql数据库_使用jdbc连接mysql数据库
  10. 如何让linux自动回收内存,linux – 什么可以导致非活动内存增加以及如何回收它?...
  11. nginx+php5-fpm安装
  12. 弱网测试用什么农_弱网测试--使用fiddler进行弱网测试
  13. java统计空格代码_java统计文件中字符,数字,汉字,空格数目
  14. ADB 环境变量配置教学
  15. 广州大喜事婚庆公司报价表
  16. 微信小程序如何获取地理位置、地图显示,逆地址解析。
  17. HTML5 UI 模板
  18. 获取windows硬件、软件信息的方法
  19. C语言实现成绩等级判别
  20. 盘点那些多倍积分的银行卡

热门文章

  1. sizeof的用法总结
  2. 原生js 打印 以及 自定义页眉页脚的一些感悟
  3. 罗斯魔影消消乐h5游戏源码
  4. 管理者的五大能力十大素质
  5. SHOW INNODB STATUS(3)
  6. 算法学习笔记----用动态规划解决钢管切割问题
  7. Domo 提供与 Snowpark 的集成,Snowflake 的全新开发者体验
  8. 人活着总是要有点精神的
  9. 基于matlab的传热学虚拟实验开发,基于MATLAB的传热学课程虚拟实验软件的开发
  10. STM32入门——基于RobotMaster——1.准备工作