阿里2020校招-数据研发岗-笔试编程题

阿里巴巴-2020秋招-数据研发工程师

虽然是昨晚才做的笔试,现在也就大概记得笔试题目,就说个大概题意。

总体感觉笔试的选择题有些难度比较大,编程题的难度是《剑指》的一般水准。


第一题:

题意:给定N*M的地图(1或者0),如果2*2区域的点均为1,可以设置一个运营区域,运营区域不互相覆盖,问最多可以设置多少个运营区域。

思路按照地图自左往右 [ : -1]、自上而下 [ : -1],逐步看目前点已经对应的右边、下边、右下边是否为1,为1即可设置运营区域。 按照这种顺序进行扫描,能确保不会影响到我们对问题的求解。挺简单的,AC。

# -*- coding: UTF-8 -*-


sam = []    # 地图
result = 0  # 输出结果


def Toint(lis):
    for i in range(len(lis)):
        lis[i]=int(lis[i])

# 查看该点是否符合条件
def que(x,y):
    global result
    if sam[x][y]==1 and sam[x+1][y] == 1 and sam[x][y+1] == 1 and sam[x+1][y+1] == 1:
        # 已经建立的把 1 变为 2
        sam[x][y] = 2
        sam[x+1][y] = 2
        sam[x][y+1] = 2
        sam[x+1][y+1] = 2
        result+=1
    return

N = input()
M = input()
data  = raw_input()
data = data.split(' ')
num=0

# 构建地图矩阵
for i in range(N):
    h = []
    for j in range(M):
        h.append(int(data[num]))
        num+=1
    sam.append(h)

# 驻点遍历
for i in range(N-1):
    for j in range(M-1):
        que(i,j)

# 输出最终的地图
# for i in sam:
#     print(i)
print(result)

'''
输入:
3
3
1 1 1 1 1 1 1 0 1
输出:
1
'''

第二题:

题意:有两张满M可用的优惠券,现在给你N件商品,让你用最少的钱花出去两张优惠券,输出花费的最少钱。如果无法使用就输出‘-1.0’

思路:首先,无法将两张优惠券一起使用的条件是N件商品的总价低于2*M,所以,只要写个简单判断,就能拿20%了。然后为什么一开始说阿里这次的难度稍低一些呢,一开始不知道怎么写,就想着速度码个深搜看看能不能先混点分,毕竟这么做在其他题目上这么做正常都是拿60%,太慢。但....丢上去就AC了。

# -*- coding: UTF-8 -*-
def Toint(lis):
    for i in range(len(lis)):
        lis[i]=int(lis[i])

min_lis = []    # 第一次选择优惠的商品
min_qian = 0    # 第一次选择优惠的商品的总价格
res_lis = []    # (结果)第二次选择优惠的商品
res_qian = 0    # (结果)第二次选择优惠的商品的总价格(最低)

# 第二次进行商品选择
def key2(data,M,now_value,now_index,now_lis,leng):
    global res_lis, res_qian
    # 商品价值大于M,可以停止
    if now_value >= M:
        if now_value + min_qian < res_qian:
            res_qian=now_value+min_qian
            res_lis = now_lis+min_lis
        return
    # 数据长度大于leng,可以停止
    if now_index>=leng:
        return
    # 选择该商品
    key2(data, M, now_value + data[now_index], now_index + 1, now_lis + [data[now_index]],leng)
    # 不选择该商品
    key2(data, M, now_value, now_index + 1, now_lis,leng)

# 第一次进行商品选择
def key(data,M,now_value,now_index,now_lis,leng):

    global min_qian,min_lis,res_lis,res_qian

    if now_value >= M:
        # 符合条件,去除目前所选择的商品,剩余的商品进入第二次选择
        data2=[]
        data2.extend(data)
        for i in now_lis:
            data2[i]=0
        min_lis = now_lis
        min_qian = now_value
        key2(data2,M,0,0,[],leng)
        return
    # 数据长度大于leng,可以停止
    if now_index>=leng:
        return
    # 选择该商品
    key(data, M, now_value + data[now_index], now_index + 1, now_lis + [now_index],leng)
    # 不选择该商品
    key(data, M, now_value, now_index + 1, now_lis,leng)




M = input()
data = raw_input()
data = data.split(' ')
Toint(data)
data.sort()

# 商品总值小于2张优惠卷,无法符合条件
if sum(data)<2*M:
    print(-1.0)
else:
    # 随便设置一个比较大的值
    min_qian = 2*M
    res_qian = 2*M
    # 适当剪枝的深度搜索
    key(data,M,0,0,[],len(data))

    print('%.1f'%(res_qian))

'''
输入:
300
200 50 50 251 251
输出:
602.0
'''

 

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
4399⼤数据笔试题 今天晚上参加了厦门 今天晚上参加了厦门4399公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 写出来的,具体的选项记不起来,⼤体题⽬在下⾯,欢迎⼤家给出⾃⼰的见解答案 写出来的,具体的选项记不起来,⼤体题⽬在下⾯,欢迎⼤家给出⾃⼰的见解答案 ⼀、选择题 ⼀、选择题 1.四个⼟豪在⼀次聚会中⽐拼财产的逻辑推理题。 A:四个⼈中,B最富。 B:四个⼈中,C最富。 C:我不是最富有的。 D:C⽐我富,A⽐C富。 已知,其中只有⼀个⼈在说假话。 请问:四个⼈中谁最富?从最富到最不富的顺序应该怎么排? 答案:A、B两⼈的答案不同,所以⼀定有⼀个⼈在说谎。也就是说,C和D说的都是实话。所以,C不是最富的,也就是说B说的是假 话。这样可以得到顺序为:B、A、C、D。 2.与HDFS类似的框架有哪些? 3.下⾯哪⼀个程序与NameNode在⼀个节点上启动? A. SecondaryNameNode B. DataNode C. TaskTracker D. JobTracker 答案:A 4.哪个是RDD的窄依赖? 5.HBase的RowKey的设计原则是什么? 6.HBase的存储底层是什么? 答案:HBase中的所有数据⽂件都存储在Hadoop HDFS⽂件系统上,主要包括上述提出的两种⽂件类型: HFile,HBase中KeyValue数据的存储格式,HFile是Hadoop的⼆进制格式⽂件,实际上StoreFile就是对HFile做了轻量级包装, 即StoreFile底层就是HFile HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File 7.Scala语⾔的闭包描述哪⼀项不是正确的? 8.Kafka⾼吞吐的原因? 答案: 顺序读写磁盘,充分利⽤了操作系统的预读机制。 linux中使⽤sendfile命令,减少⼀次数据拷贝,如下: 把数据从硬盘读取到内核中的页缓存。 把数据从内核中读取到⽤户空间。(sendfile命令将跳过此步骤) 把⽤户空间中的数据写到socket缓冲区中。 操作系统将数据从socket缓冲区中复制到⽹卡缓冲区,以便将数据经⽹络发出 ⽣产者客户端缓存消息批量发送,消费者批量从broker获取消息,减少⽹络io次数,充分利⽤磁盘顺序读写的性能。 通常情况下kafka的瓶颈不是cpu或者磁盘,⽽是⽹络带宽,所以⽣产者可以对数据进⾏压缩。 9.ZooKeeper的⾓⾊是什么? 答案: Leader ⾓⾊ Leader 服务器是整个zookeeper 集群的核⼼,主要的⼯作任务有两项: 事物请求的唯⼀调度和处理者,保证集群事物处理的顺序性。 集群内部各服务器的调度者。 Follower ⾓⾊ Follower ⾓⾊的主要职责是: 处理客户端⾮事物请求、转发事物请求给leader服务器。 参与事物请求Proposal的投票(Leader发起的提案,要求 Follower投票,需要半数以上follower节点通过,leader才会 commit数据)。 参与Leader选举的投票。 Observer ⾓⾊ Observer 是 zookeeper3.3 开始引⼊的⼀个全新的服务器⾓⾊,从字⾯来理解,该⾓⾊充当了观察者的⾓⾊。观察 zookeeper 集群中的最新状态变化并将这些状态变化同步到 observer 服务器上。Observer 的⼯作原理与 follower ⾓⾊基本⼀致,⽽它 和 follower ⾓⾊唯⼀的不同在于 observer 不参与任何形式的投票,包括事务请求Proposal的投票和leader选举的投票。简单来 说,observer服务器只提供⾮事物请求服务,通常在于不影响集群事务处理能⼒的前提下提升集群⾮事物处理的能⼒。 10.Spark Stage的数量有什么决定? 答案:Partition ⼆、填空题 ⼆、填空题 1.Spark的三种部署模式? 2.RDD有哪些缓存机制? 3.RDD类型有⼏种?每⼀种有哪些操作? 4.map和flatMap的区别是什么? 5.RDD的依赖⽅式? 6.有存储在Hive上的⼀张pay_log表 ser_name pay_money pay_date 1)使⽤SQL语句查询消费总额、消费总次数、消费最⼤的⾦额、消费最⼤的⾦额 2)使⽤SQL语句每⼀天当天消费的总⾦额 3)使⽤SQL语句对消费⾦额进⾏排名(⽤rank()) 4)使⽤SQL语句查询充值⾦额集合(⽤collect_set()) 7.HDFS block的默认值是多少?机架感知配置下分别存放在什么位置? 8
2023年3月11日,美团春季招聘笔试中共包含五道编程题目。以下是对每道题目的简要说明: 1. 题目一:这道题目要求解决一个数字统计的问题。可能涉及到的知识点包括数据结构、循环和条件判断等。解决问题的思路可能是使用字典等数据结构来保存统计结果,并使用循环逐个读取输入数据并进行统计。 2. 题目二:这道题目可能是一个字符串处理的问题。需要使用字符串的方法进行操作,如提取、拼接、查找和替换等。可能的解决思路包括使用正则表达式、切片和遍历等。 3. 题目三:这道题目可能涉及到算法和数据结构的知识。可能是一道涉及到数组、链表、树等数据结构的问题。解决思路可能包括遍历、递归、搜索和排序等。 4. 题目四:这道题目可能是一个动态规划的问题。需要根据给定的条件和规则,通过动态规划的方式求解问题。解决思路包括定义状态和转移方程,使用递推或记忆化搜索进行求解。 5. 题目五:这道题目可能是一个图论或网络问题。需要根据给定的图或网络结构,解决一个相关的问题。可能涉及到广度优先搜索、深度优先搜索、最短路径等知识。解决思路可能包括使用图或网络的相关算法进行求解。 以上只是对这五道编程题目的一些可能情况进行的简要描述,具体的题目内容可能会有所不同。希望这些信息能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值