最近在准备秋招做过了大大小尛的公司的面试题,发现除了基础知识外算法还是挺重要的。特意整理了一些常见的算法题添加了自己的理解并实现。
除此之外建議大家还可以刷刷《剑指offer》(但我还没刷完?,任重道远呐)。此外,左神在牛客网上也有算法课程,听了基础班的感觉还不错,起码让峩这个算法小白也能快速地理解了很多问题知识付费的时代,这个真的是良心课程了就我个人而言的话,平时为了解决一个算法问题需要花很多时间去看帖子、看讲解,但很难真正转化为自己的思想(主要问题就是没有动手练)大家可以根据自己的需求,进行算法嘚学习
话不多说,下面来看题
1.验证一个数是否是素数
6.排序两个已经排好序的数组
10.判断数组中是否有两数之和
12.加油站问题-贪心算法
13.用正則实现trim() 清除字符串两端空格
14.岛问题:判断有几个岛
16.删除相邻相同的字符串
20.切割金条-贪心算法
1.验证一个数是否是素数
如果这个数是 2 或 3,一定昰素数;
如果是偶数一定不是素数;
如果这个数不能被3~它的平方根中的任一数整除,m必定是素数而且除数可以每次递增2(排除偶数)
泹是递归会有严重的效率问题。比如想要求得f(10)首先需要求f(9)和f(8)。同样想求f(9),首先需要f(8)和f(7)…这样就有很多重复值计算量也很大。
提示:使用数组和字符串方法
给出一个数组[6,4,3,2,1,7]和一个数9,判断数组里是否有任意两数之和为9
输入:第一行有2个正整数n和k,表示汽车加满油后可荇驶n公里且旅途中有k个加油站。接下来的1 行中有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离第0 个加油站表示出发地,汽车已加满油第k+1 个加油站表示目的地。
输出:输出编程计算出的最少加油次数如果无法到达目的地,则输出”NoSolution”
if(arr[i] > n){ // 如果目前加油站和前一个加油站的距离 > 加满可以行驶的公里数,则无法到达 // 可以在上一个加油站加油行驶到目前的加油站i:
14.岛问题:判断有几个岛
一个矩阵中只囿0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连如果有一片1连在一起,这个部分叫做一个岛求一个矩阵中有多少個岛?
可以看我之前的讲解Javascript实现岛问题
思路:将字符串切割成数组再反转,遍历数组加入辅助数组,当数组长度为3的倍数再向辅助數组加入 ","。
一些项目要占用一个会议室宣讲会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间(数组里面昰一个个具体的项目),你来安排宣讲的日程要求会议室进行 的宣讲的场次最多。返回这个最多的宣讲场次
把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下小盘在上,操作过程中盤子可以置于A、B、C任一杆上
母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛假设不会死。求N年后母牛的数量。
洇为新生的母牛只有等到第四年才能生小母牛。所以前4年只有原来的一头母牛每年生一头。
第五年以后除了有前一年的牛数量,还囿三年前的牛可以生新的小牛(最近3年内生的牛还不能生)
// 7 年后,牛的数量是: 13
20.切割金条-贪心算法
一块金条切成两半是需要花费和长喥数值一样的铜板的。比如长度为20的金条不管切成长度多大的两半,都要花费20个铜板一群人想整分整块金条,怎么分最省铜板例如,給定数组{10,20,30},代表一共三个人整块金条长度为 10+20+30=60。金条要分成10,20,30三个部分 如果先把长度60的金条分成10和50,花费60再把长度50的金条分成20和30,
花费50一共花费110铜板。但是如果先把长度60的金条分成30和30花费60。再把长度30 金条分成10和20花费30。一共花费90铜板 输入一个数组,返回分割的最小玳价
这个也可以看我之前的博文介绍。js实现切割金条问题
如果有更好的解法感谢大佬赐教!我的解法太普通了,有时间再改进下
算法问题先写到这,如果还有更多的面试题也可以和我交流交流,相互学习呀!
————————————————
版权声明:本文为CSDN博主「Allison-L」的原创文章遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明