最新【Python 百练成钢】时间调整、二进制数、回文素数、字母距离(1),2024年最新2024年阿里Python岗面试必问

简介: 最新【Python 百练成钢】时间调整、二进制数、回文素数、字母距离(1),2024年最新2024年阿里Python岗面试必问
t=int(input())
a+=(b+t)//60
b=(b+t)%60
print(a)
print(b)

💟二进制数💞

==========================================================================


🧡问题描述🧡


问题描述

小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个二进制位?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

这题老实说误导了很久,总以为是要求1-10000转成二进制总共多少位,

结果是14

🧡问题分析🧡


使用我们上篇博客提到过的不同进制之间转换,这道题使用Pyhton实现起来极为简单,使用C艹的话要求10000的二进制长度。实现方法就是对2进行取余。

🧡代码实现🧡


print(len(bin(10000)[2:]))

💟回文素数💞

==========================================================================


💛问题描述💛


求出大于或等于 N 的最小回文素数。

回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。

例如,2,3,5,7,11 以及 13 是素数。

回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。

例如,12321 是回文数。

示例 1:

输入:6

输出:7

示例 2:

输入:8

输出:11

示例 3:

输入:13

输出:101

提示:

1 <= N <= 10^8

答案肯定存在,且小于 2 * 10^8

💛问题分析💛


使用Python实现这个的话属实有点吃力,在这给大家扩展一下思维,题目问的是1-2亿之间的素数回文数

既要满足两个条件,在数值很大的时候回文数是比较稀少的,所以我们可以先进行筛选,将1-2亿内的素数回文数直接筛出来,本题中使用的是埃氏筛,也就是注释的部分。全找出来可能需要几秒,我们不担心,将所有符合条件的数据打进表之后,直接将表复制进你要提交的程序,然后遍历就好。1-2亿内才有2千多个符合条件的数据。

由于这个表比较长,在这里就不直接粘进代码了。

💛代码实现💛


from math import sqrt

打表(这些操作不要出现在所提交的程序内)


def F(n):
return str(n)==str(n)[::-1]
# 打表法
ansls=[]
templs=[]
ans=[True]int(21e8+1)
ans[0]=False
ans[1]=False
for i in range(2,int(sqrt(2*1e8))+1):
if ans[i]:
for j in range(ii,int(21e8)+1,i):
ans[j]=False
for i in range(int(2*1e8)):
if ans[i]==True:
templs.append(i)
for i in templs:
if F(i):
ansls.append(i)
print(len(ansls))
print(ansls)

将上面得到的结果ansls中的数据直接复制过来。

ansls=[…]
n=int(input())
for i in ansls:
if i>=n:
print(i)
break

💟字母距离💞

==========================================================================


💚问题描述💚


问题描述

两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为 2,L 和 Q 的距离为 5。

对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。

例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。

请问,LANQIAO 的内部距离是多少?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

我们可以改写一下输入任意长度字符,判断其内部距离,字符串长度小于10w

这是一个往届蓝桥杯真题的填空题,但是我们不妨将其改写成一下

参考结果

WATJKJDXRGZNXYTW 1132

LANQIAO 162

💚问题分析💚


每个字母之间的间隔使用的是ASCII表中的距离,比如A为65,Z为90,AZ之间的距离就是25,Z与A之间的距离也是25,如果数据比较多的话可以将其写进字典,然后计算,26种字母关于个数的笛卡尔积。应该有26*26种情况,在计算A-Z距离与Z-A距离时明显重复计算了所以在得到的结果应该除以2

💚代码实现💚


s=input()
dic={chr(k):0 for k in range(65,91)}
for i in s:
dic[i]+=1
ans=[0]*26
i=0
for k1 in dic:
for k2 in dic:
if dic[k1]!=0 and dic[k2]!=0 and k1!=k2:
ans[i]+=(dic[k2]*dic[k1]*abs(ord(k1)-ord(k2)))
i+=1
print(sum(ans)//2)

💟CTF💞

=========================================================================


💙问题描述💙


Description

在迷迷糊糊的进入大学以后,你决定参加竞赛出人头地,但是身处机算机学院的你,却发现竞赛并不等于电竞,你左选右选,发现了acm和ctf,一直想成为黑客的你,决定去ctf那里学习一下,但是当ctf要学的东西真是太多辣,pwn,web,逆向…,作为萌新的你决定多刷题。

学长给你指定了一个学习计划,考虑到计算机的本质是个二进制,所以你将在2^1

2

1天内每天刷一题,

22 天内每天刷两题,即第1,2天每天刷一题,第 3 到 6 天每天刷两题,2x

天每天刷xx题,以此类推,有算法基础的你决定写一个程序来看看自己在规定的天数内到底要写几道题

Input

一个整数 tt 表示天数(1 <=t <= 10^7)(1≤t≤10

7

)。

Output

一个整数xx表示要刷的题目数量。

Sample Input

1

9

Sample Output

1

19

💙问题分析💙


刚开始计算的时候循环内进行题目计数使用的是加法(也就是每一天写多少道题),提交的时候超时

后面优化后是按时间段进行计算,最后得到的结果减去超出的天数乘以每天的写题量。

💙代码实现💙


暴力


n=int(input())
day=0
ans=0
k=0
i=1
if n==1:
print(1)
elif n==2:
print(2)
else:
while day
i*=2
k+=1
for x in range(0,i):
ans+=k
day+=1
if day==n:
break
print(ans)
优化一下
n=int(input())
day=0
ans=0
k=0
i=1
if n==1:
print(1)
elif n==2:
print(2)
else:
while day
i*=2
k+=1
ans+=k*i
day+=i
ans-=(day-n)*k
print(ans)

💟Huffuman树💞

===============================================================================


💜问题描述💜


问题描述

Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:

1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。

2. 重复步骤1,直到{pi}中只剩下一个数。

在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。

3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式

输入的第一行包含一个正整数n(n<=100)。

接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。

输出格式

输出用这些数构造Huffman树的总费用。

样例输入

5

5 3 8 2 9

样例输出

59

💜问题分析💜


这个题目让我刷新了对哈弗曼树的认知,原来是以为哈夫曼数计算权值的时候只能使用节点权值乘以他的距离,但是还可以实现的方式是从最底层进行加,每次累加最小的两个节点,当加到根节点的时候,权值也就计算出来了。

💜代码实现💜


n=int(input())
ls=list(map(int,input().split()))
ans=[]
while len(ls)>1:
ls.sort(reverse=True)
temp=ls.pop()+ls.pop()
ls.append(temp)
ans.append(temp)
print(sum(ans))

💟抽奖💞

========================================================================


🤎问题描述🤎


Description

在终于熬过了高中之后,你进入了大学,你听信了大人们的谎言,上了大学就轻松了,实际上你发现大学比高中更卷了。

但是!你已经佛系了起来,凭借着高中学过oi,在大学开始了摸鱼,而一直打LOL的你,最近发现了原神这一款游戏也很有意思,

而且作为lsp的你,对于里面的老婆你表示你全都要,但是为了计算好你怎么把原石投入池子,你需要好好计划一番。

你只喜欢up池,你当前已经拥有了xx颗原石,00个星辉,假设你不是很非也不是很欧,

每10发平均可以获得3个星辉(注意每满十发才可获得3星辉,1~9发无星辉,10~19发3星辉),

根据原神的规则,每160颗原石可以抽一发,每5个星辉可以抽一发,作为大学生的你并没有太多钱来氪金,所以你得算一算目前到底可以抽多少发。

Input

一个整数xx,表示xx颗原石,(1 <= x <= 10^8)。

Output

一个整数nn,表示你可以抽多少发。

Sample Input 1

3200

Sample Output 1

21

🤎问题分析🤎


进行抽奖,最先应该考虑使用原石进行抽奖,然后用原石抽奖会得到许多的星辉,再使用星辉进行抽奖

星辉抽奖得到一定的抽奖次数后又可以得到星辉,就这样利滚利,抽奖的次数也就越来越多,直到星辉抽到不够5,跳出循环。

🤎代码实现🤎


x=int(input())
num=0
n=x//160
num=3*(n//10)
while num:
if num-5>=0:
n+=1
if n%10==0:
num+=3
num-=5
else:
break
print(n)

💟前缀最值&后缀最值💞

===============================================================================


💝问题描述💝


给定一个序列,求该序列的浅前缀最小值,前缀最大值。

给定一个序列,求该序列的浅后缀最小值,后缀最大值。

💝问题分析💝


在进行线性动态规划的时候可能有需求

下一期应该是动态规划专题。这个作为铺垫

当然这只是求解思路,进行实际问题求解的时候还要看题目要求

然后定边界的大小。

💝代码实现💝


前缀最值

ls=[2,1,2,31,23,12,3,12,3,12,3,13,1,23,-1,2,31,3,1,4,2,42,14,2,31,4,53,4,53,4,6,45,7,6,5,87]

前缀最大值

ans=[0]*len(ls)
ans[0]=ls[0]
i=1
while i
ans[i]=max(ans[i-1],ls[i-1])
i+=1
n=int(input(“请输入要求前缀最大值数的个数”))
t=[]
for i in range(n):
t.append(int(input()))
for i in t:
print(ans[i])

前缀最小值

ans=[0]*len(ls)
ans[0]=ls[0]
for i in range(1,len(ls)):
ans[i]=min(ans[i-1],ls[i-1])
n=int(input(“请输入要求前缀最小值数的个数”))
t=[]
for i in range(n):
t.append(int(input()))
for i in t:
print(ans[i])
后缀最值
ls=[1,1,2,31,23,12,3,12,3,12,3,13,1,23,1,2,31,3,1,4,2,42,14,2,31,4,53,4,53,4,6,45,7,6,5,87]
#给定一个序列,n个下标,输出下标后缀的最大值
n=len(ls)
ans=[0]*n
ans[n-1]=ls[n-1]
for i in range(n-2,-1,-1):
ans[i]=max(ans[i+1],ls[i+1])


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。



相关文章
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
8天前
|
Python
Python-素数
本文介绍了如何使用 Python 判断素数,并通过具体示例展示了求 100 以内及自定义范围内所有素数的方法。内容包括素数的定义、判断素数的底层逻辑和步骤,以及详细的代码演示。适合初学者参考学习。
|
16天前
|
存储 NoSQL 架构师
阿里面试:聊聊 CAP 定理?哪些中间件是AP?为什么?
本文深入探讨了分布式系统中的“不可能三角”——CAP定理,即一致性(C)、可用性(A)和分区容错性(P)三者无法兼得。通过实例分析了不同场景下如何权衡CAP,并介绍了几种典型分布式中间件的CAP策略,强调了理解CAP定理对于架构设计的重要性。
47 4
|
1月前
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
1月前
|
SQL 关系型数据库 MySQL
阿里面试:1000万级大表, 如何 加索引?
45岁老架构师尼恩在其读者交流群中分享了如何在生产环境中给大表加索引的方法。文章详细介绍了两种索引构建方式:在线模式(Online DDL)和离线模式(Offline DDL),并深入探讨了 MySQL 5.6.7 之前的“影子策略”和 pt-online-schema-change 方案,以及 MySQL 5.6.7 之后的内部 Online DDL 特性。通过这些方法,可以有效地减少 DDL 操作对业务的影响,确保数据的一致性和完整性。尼恩还提供了大量面试题和解决方案,帮助读者在面试中充分展示技术实力。
|
2月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
2月前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
27 1
|
2月前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
Kubernetes 架构师 算法
阿里面试:全国14亿人,统计出重名最多的前100个姓名
文章介绍了如何解决“从全国14亿人的数据中统计出重名人数最多的前100位姓名”的面试题,详细分析了多种数据结构的优缺点,最终推荐使用前缀树(Trie)+小顶堆的组合。文章还提供了具体的Java代码实现,并讨论了在内存受限情况下的解决方案,强调了TOP N问题的典型解题思路。最后,鼓励读者通过系统化学习《尼恩Java面试宝典》提升面试技巧。
阿里面试:全国14亿人,统计出重名最多的前100个姓名

热门文章

最新文章