导航:首页 > 源码编译 > 面试基本算法题

面试基本算法题

发布时间:2023-08-11 22:02:43

A. 阿里面试官:恕我直言,搞懂这10道算法题,轻松拿20K不是问题

01打怪兽

难度:容易

现在有3只怪兽,他们的都有自己的血量a,b,c(1<=a,b,c<=100),当Tom打死第一怪兽的时候花费的代价为0,其余的怪兽的代价为当前的怪兽的血量减去上一个怪兽的血量的绝对值。问Tom打死这些怪兽所需要的最小代价

02数组变换

难度:中等

给出一个长度为 n 的数组,和一个正整数 d。 你每次可以选择其中任意一个元素 a[i] 将其变为 a[i] + d 或 a[i] - d,这算作一次操作。你需要将所有的元素全部变成相等元素,如果有解,请输出最小操作次数,如果无解请输出-1。

01超级区间

难度:中等

Tom现在有一个长度为n的数组,Jerry给Tom定义了一种超级区间,如果区间[l,r]满足(a[l]+…+a[r])>=k,则区间[l,r]被称为超级区间,现在Jerry想让Tom告诉他数组中有多纤岩少个超级区间。

02能量半径

难度:中等

codancer来到了一个能量平面上的中心,坐标为(0,0),接下来巫师Tom会在q个坐标上放置能量点,每个信凳能量点的能量值为1,为了打败哥斯拉,他需要至少k点的能量,因此他想确定一个最小的整数半径r使得codancer能够从这个圆心为(0,0),半径为r的圆形区域内得到至少k个能量值,请你帮他确定最小的整数半径r。

01找出二叉搜索树的第2大的数

难度:容易

给定一个二叉搜索树,找出其第二大的数。

02字符配对

难度:中等

给你一个字符串,字符串中仅包含"A","B",现在有四种字符串"AA","AB","BA","BB",每种字符串都有他们的权值,问从给出的字符串中能够得到的最大权值为多少(一个字符只能属于一个子字符串)?

01斐波那契字符串

难度:中等

Tom发现了一种神奇的字符串-斐波那契字符串,定义f[1]=0,f[2]=1,对于所有的i>2都有f[i]=f[i-2]+f[i-1],其中“+”代表拼接,比如01+10=0110,现在对于字符串f[n],请判断f[n]的第k项是0,还是1?

01Hikari and Interstellar Experience

难度:容易

在无垠的宇宙中,有 n 个星球,第 i 个星球有权值vi 。由于星球之间距离极远,因此想在有限的时间内在星际间旅行,就必须要在星球间建立传送通道。 任意两个星球之间均可以建立传送通道毁坦御,不过花费并不一样。 第 i 个星球与第 j 个星球的之间建立传送通道的花费是lowbit(vi ⊕ vj) ,其中⊕为二进制异或,而lowbit(x)为 x 二进制最低位的值,例如lowbit(5) = 1,lowbit(8) = 8 。 特殊地,lowbit(0) = 0。 Hikari 想在这 n 个星球间穿梭,于是――你需要告诉 Hikari,要使这 n 个星球相互可达,需要的花费最少是多少?

02二进制字符串

难度:中等

Tom得到了一个二进制字符串s,即s只由Ɔ'和Ƈ'组成,现在令d(t)代表二进制字符串t在十进制下的值。 那么d(“011”)=3,d(“0001000”)=4,如果t的长度等于d(t),那么就称t是奇妙串,现在Tom想知道s中有多少个子串是奇妙串?

01小明的数学作业

难度:容易

众所周知,小明是一个数学小能手,有一天数学老师给了小明一个长度为n(2<=n<=5000)的序列,其中第i个数是ai(0<=ai<=1e9),数学老师想知道这个序列排序后,其中最长的等差子序列的长度是多长,聪明的你能帮小明解决这个问题吗?

02Codancer上楼

codancer来到了一栋大楼前,现在他要上楼。

如果codancer从第x层走楼梯到第y层(y>x),那么他所花费的时间是a[x]+a[x+1]+…+a[y];

如果他从x层坐电梯到第y层,那么他所花费的时间是c+(b[x]+b[x+1]+…+b[y]),因为他等电梯的时间为c。

现在codancer想知道从第1层到第n层需要最少需要多长时间?

01变换的秘钥

难度:中等

Tom最开始有一个密钥s1,s1是长度为n的由小写字母组成的字符串。Jerry也有一个长度为n的由小写字母组成的密钥s2。现在有m组关系,每组关系由两个数字[u,v]构成(1<=u,v<=26),表示26个字母表中的第u个小写字母可以直接转换为第v个小写字母。假设u=1,v=2,那么说明字母'a'可以直接转换为字母'b'。现在Tom对于s1的每个字母使用无数次转换,请判断s1能否转换为s2?

01最大边权和

难度:简单

现在有n个点(1<=n<=1000),每个点都有一个值称为点权ai(ai为偶数,1<=ai<=1000),现在可以将任意两个点相连,连起来以后这条边也有一个值称为边权,这个边的边权为这两个点的点权之和的一半。现在需要你添加n-1条边,问将这n个点连通以后(连通是指任意两个点都能互相到达)的最大的边权和是多少?

02钱庄

难度:中等

钱庄每天能够收到很多散钱,第i个散钱的值2 wi。为了便于管理,钱庄每天都会向中央银行申请兑换钱币,假设钱庄有一些散钱使得2 k1+2 k2+...+2 km=2^x(x为非负整数),那么就可以将这些散钱兑换成一个大钱币,问在钱庄收到的这些散钱最终最少能变成几个钱币?

01codancer的旅行

难度:困难

期末考试终于结束啦,Codancer开始了他的旅行,现在整个地图上有n个城市,这些城市之间有n-1条道路相连,每条道路都有一个距离,并且保证整个图是连通的,即这个地图可以看作是一棵树,现在假设Codancer要从城市A到城市B,那么他的路费就是从A-B的路径上边权最大的边的权值wmaxx元。现在Codancer有k元,他想知道他能选择那些(A,B)并且A<B使得codancer能够到达?

HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。

01全奇数组

难度:中等

codancer现在有n个正整数a[1],a[2]…a[n],Tom告诉codancer他可以进行下列操作,选择某个偶数x,把这n个数中全部等于x的数字除2,Tom想知道把这n个数字全部变成奇数最少需要几次这样的操作?

以上十道算法题你都能搞定嘛?备战大厂每日刷一道算法题来提升自己,坚持坚持再坚持,必然会有收获。为大家整理一份781页的高分宝典,知识较为全面,可分享给想要学习提升自己的朋友。

领取方式:私信【面试宝典】或点击右方链接: https://shimo.im/docs/QVy8HrQgPYkx9Ddg/ 即可免费领取,喜欢本文不妨关注+转发支持一下~~

B. 面试会出哪些经典算法题

1、排序算法∶快速排序、归并排序、计数排序

2、搜索算法∶回溯、递归、剪枝技巧

3、图论∶最短路、最小生成树、网络流建模

4、动态规划:背包问题、最长子序列、计数问题

5、基础技巧:分治、倍增、二分、贪心

6、数组与链表:单/双向链表、跳舞链

7、栈与队列

8、树与图:最近公共祖先、并查集

9、哈希表

10、堆:大/小根堆、可并堆

11、字符串∶字典树、后缀树

(2)面试基本算法题扩展阅读:

算法的重要性:

1、算法能力能够准确辨别一个程序员的技术功底是否扎实;

2、算法能力是发掘程序员的学习能力与成长潜力的关键手段;

3、算法能力能够协助判断程序员在面对新问题时,分析并解决问题的能力;

4、算法能力是设计一个高性能系统、性能优化的必备基础。

C. 面试经典数据结构和算法汇总

如果说数据结构是骨架,那么算法就是灵魂。没了骨架,灵魂没有实体寄托;没了灵魂,骨架也是个空壳。两者相辅相成,缺一不可,在开发中起到了砥柱中流的作用。

现在我对各种数据结构和算法做一总结,对比一下它们的效率

1.数据结构篇
1. 如果让你手写个栈和队列,你还会写吗?
2. 开发了那么多项目,你能自己手写个健壮的链表出来吗?
3. 下次面试若再被问到二叉树,希望你能对答如流!
4. 面试还在被红-黑树虐?看完这篇轻松搞定面试官 !

2.排序算法篇
1. 几个经典的基础排序算法,你还记得吗?
2. 手把手教你学会希尔排序,很简单!
3. 快速排序算法到底有多快?
4. 五分钟教你学会归并排序
5. 简单说下二叉树排序
6. 学会堆排序只需要几分钟
7. 图,这个玩意儿竟然还可以用来排序!

掌握了这些经典的数据结构和算法,面试啥的基本上没什么问题了,特别是对于那些应届生来说。接下来再总结一下不同数据结构和算法的效率问题,做一下对比,这也是面试官经常问的问题。

数据结构常用操作效率对比:

常用排序算法效率的对比:

关于经典的数据结构和算法,就总结到这,本文建议收藏,利用等公交、各种排队之时提升自己。这世上天才很少,懒蛋却很多,你若对得起时间,时间便对得起你。

D. 大公司笔试面试有哪些经典算法题目

1、二维数组中的查找

具体例题:如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列?



E. 面试最常考的 100 道算法题分类整理

大家好,我是 “负雪明早冲烛” ,一位用 7 年写槐毁了 1000 篇 LeetCode 算法题题解的程序员。欢迎关注。

粉丝常说: LeetCode 算法题太多了,准备面试该刷哪些题目

我之前根据 LeetCode 上面的点赞量分享过: LeetCode 上最经典的 100 道算法题 。

这 100 道题目都属于经典题目了,面试也常考,不过我还是不放心呢,毕竟 经典题 ≠ 面试题 呀!

但如果想知道面试常考的 100 道算法题的话,需要至少整理 1000 篇面经吧?这个工作量可不小啊!

还好,网上有个开源项目,帮我们做了这件事情,这个项目就是 CodeTop

这是网站的界面(地址: https://codetop.cc/home ),展示的就是每个面试题目出现的频度情况,甚至区分了公司和岗位:

这是开源项目的 GitHub 主页,已经 11.5k star ⭐️ 了:

这个项目中的题目来源是牛客网的面经、网友投票等,而且持续更新中,所以还是比较可靠的。

我对这个项目做了陆明歼整理,分类整理出来面试常考的 100 道算法题。

在整理之后,我对结果还是有点 惊讶 的!因为一些常见的数据结构与算法,竟然没有在常考面试中出现过!

比如前缀和、前缀树、并查集、图,这些都没有出现……

最常考面试题还是很基本的链表、二叉树、动态规划等等,是不是符合你的认知呢?

强烈建议大家在面试前把这 100 道题目搞懂!

作为宠粉达人,我提供了 3 种方式查看这 100 道题目:

没有任何套路,直接分享给大家!

在线查看地址: https://www.mubucm.com/doc/7jiBYKCKqet

在线查看地址: https://leetcode-cn.com/problem-list/q3iOID0B/

所有题目的地址如下:

前序遍历

中序遍历

层序遍历

视图

如果你觉得对你有帮助的话,求赞、求分享、求收藏。你的每一点鼓励都是对我的最大帮助!

F. 大公司笔试面试有哪些经典算法题目

1、二维数组中的查找

具体例题:如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列?



G. 经典C语言面试算法题

经典C语言面试算法题

1.写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

功能:

在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回

9,outputstr所指的值为123456789。

#include

#include

#include

int FindMax_NumStr(char *outputstr,char *inputstr)

{

char *in = inputstr,*out = outputstr,*temp;

char *final;

int count = 0;

int maxlen = 0;

int i;

while(*in!='')

{

if(*in > 47 && *in < 58)

{

for(temp = in;*in> 47 && *in <58;in++)

count++;

}

else

in++;

if(maxlen < count)

{

maxlen = count;

count = 0;

final = temp;

}

}

for(i =0;i

{

*out = *final;

out++;

final++;

}

*out = '';

return maxlen;

}

void main(void)

{

char input[]="abc123def123456eec123456789dd";

char output[50] = {0};

int maxlen;

maxlen = FindMax_NumStr(output,input);

printf("the str %s ",output);

printf("the maxlen is %d ",maxlen);

}

2.求1000!的未尾有几个0;

求出1->1000里,能被5整除的数的个数n1,能被25整除的数的个数n2,能被125整除的'数的个数n3,能被625整除的数的个数n4.1000!末尾的零的个数=n1+n2+n3+n4;

只要是末尾是5的数它乘以一个偶数就会出现一个0,而末尾是0的数乘以任何数也都会出现0

而末尾是0的如果是一个0肯定能被5整除,两个0肯定能被25整数,以此类推3个0就能被5的三次方整除,也就是125

1000!就是1-1000数的相乘,能被5整除的所有数分别乘以一个偶数就会出现这些个的0,而例如100,既能被5整除,也能被25整除,所以就是两个0

1000,既能被5,25,也能被125整除,所以算三个0

例如是10!=1*2*3*4*5*6*7*8*9*10,里面有两个数能被5整除,就是10和5,而

5随便乘以一个偶数就出现一个0,而10乘以其它数也会出现一个0,所以10!会有两个0

#include

#define NUM 1000

int find5(int num)

{

int ret = 0;

while(num%5==0)

{

num/=5;

ret++;

}

return ret;

}

int main(void)

{

int result = 0;

int i;

for(i=5;i<=NUM;i+=5)

result +=find5(i);

printf("the total zero number is %d ",result);

return 0;

}

3。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

char * search(char *cpSource, char ch)

{

char *cpTemp=NULL, *cpDest=NULL;

int iTemp, iCount=0;

while(*cpSource)

{

if(*cpSource == ch)

{

iTemp = 0;

cpTemp = cpSource;

while(*cpSource == ch)

++iTemp, ++cpSource;

if(iTemp > iCount)

iCount = iTemp, cpDest = cpTemp;

if(!*cpSource)

break;

}

++cpSource;

}

return cpDest;

}

;

H. 面试算法题

定义一个函数实现数据类型的转换

第一个元素是数据标识,第二个元素的数值必须大于等于50才返回,不够50往后累加,加到最后如果不够50也直接返回,因为没有可加的数据了

例子1:

a = [[1,3],[2,51],[3,49],[4,42],[5,42]] #入参

a1 = [[2,54],[4,91],[5,42]] #返回

例子2:

b = [[1,50],[2,5],[3,10],[4,42],[5,42],[6,10]] #入参

b1 = [[1,50],[4,57],[6,52]] #返回

a = [[1, 3], [2, 51], [3, 49], [4, 42], [5, 42]]

li = []

n =0

for i, kin a:

    n += k

    if n >=50:

       li.append([i, n])

        n =0

    elif len(a) == i:

li.append([i, k])

    print(li)

一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

def fun(n):

    if n ==1:

        return 100 /2

    else:

        res = fun(n -1) /2

        return res

print(fun(10))

def func(n):

    if n ==1:

        return 100

    else:

        return (fun(n -1) *2) + func(n -1)

print(func(10))

# for 循环实现

def height_100():

# 定义S用来计算总距离

    s =0

    h =100

    for iin range(10):

# 加上本次落地的距离

        s += h

h = h /2

        # 加上反弹的距离

        s += h

print(f'第10次落地的总距离为:{s-h}')

print(f'第10次反弹的高度:{h}')

height_100()

斐波拉契数列

[1,1,2,3,5,8,13,21,34,55]

分析:

月份      数量

1        2只

2        2只

3        4只

4        6只

5        10只

6        16只

def tu_func(n):

    if n ==1 or n ==2:

            return 2

    else:

            return tu_func(n -1) + tu_func(n -2)

print(tu_func(10))

# for 循环实现

def tu_func1(n):

    s = []

    for iin range(1, n +1):

    if i ==1 or i ==2:

        s.append(2)

    else:

            s.append(s[i -2] + s[i -3])

    return s

print(tu_func1(10))

小明有100元钱 打算买100本书,A类书籍5元一本,B类书籍3元一本,C类书籍1元两本,

    请用程序算出小明一共有多少种买法?

def func3():

    count =0

    for ain range(21):

            for bin range(34):

                    c =100 - a - b

                    if a *5 + b *3 + c *0.5 ==100:

                        count +=1

                        print(a, b, c)

    print(F'一共有{count}种买法')

func3()

阅读全文

与面试基本算法题相关的资料

热点内容
苹果如何创建服务器错误 浏览:494
软考初级程序员大题分值 浏览:473
js压缩视频文件 浏览:578
linux如何通过命令创建文件 浏览:989
应用加密app还能访问应用嘛 浏览:432
安卓怎么用支付宝交违章罚款 浏览:665
php面向对象的程序设计 浏览:504
数据挖掘算法书籍推荐 浏览:894
投诉联通用什么app 浏览:150
web服务器变更ip地址 浏览:954
java正则表达式验证邮箱 浏览:360
成熟商务男装下载什么软件app 浏览:609
加密2h代表长度是多少厘米 浏览:23
拍卖程序员 浏览:101
电脑的图片放在哪个文件夹 浏览:276
unsignedintjava 浏览:217
编译器下载地址 浏览:43
什么是面对对象编程 浏览:708
b站服务器什么时候恢复 浏览:721
6p相当于安卓机什么水准 浏览:499