美团笔试3.18 题目加代码

Q1

捕获

小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。

敌人的位置将被一个二维坐标 (x, y) 所描述。

小美有一个全屏技能,该技能能一次性将若干敌人一次性捕获。

捕获的敌人之间的横坐标的最大差值不能大于A,纵坐标的最大差值不能大于B。

现在给出所有敌人的坐标,你的任务是计算小美一次性最多能使用技能捕获多少敌人。

输入描述

第一行三个整数N,A,B,表示共有N个敌人,小美的全屏技能的参数A和参数B。

接下来N行,每行两个数字x,y,描述一个敌人所在的坐标。

1≤N≤5001≤A,B≤10001≤x,y≤1000

输出描述

一行,一个整数表示小美使用技能单次所可以捕获的最多数量。

样例输入

3 1 1

1 1

1 2

1 3

样例输出

2

这题枚举左上角的点即可 笔试的时候加了绝对值方法错了 以为a了就没管 不加绝对值应该是可以的

Q2

彩带

题目描述:

小美现在有一串彩带,假定每一厘米的彩带上都是一种色彩。

因为任务的需要,小美希望从彩带上截取一段,使得彩带中的颜色数量不超过K种。

显然,这样的截取方法可能非常多。于是小美决定尽量长地截取一段。

你的任务是帮助小美截取尽量长的一段,使得这段彩带上不同的色彩数量不超过K种。

输入描述

第一行两个整数N,K,以空格分开,分别表示彩带有N厘米长,你截取的一段连续的彩带不能超过K种颜色。

接下来一行N个整数,每个整数表示一种色彩,相同的整数表示相同的色彩。

1≤N,K≤5000,彩带上的颜色数字介于[1, 2000]之间。

输出描述

一行,一个整数,表示选取的彩带的最大长度。

样例输入

8 3

1 2 3 2 1 4 5 1

样例输出

5

lc常规滑动窗口

n, k = map(int, input().split())
*nums, = map(int, input().split())
cnt = 0 
from collections import defaultdict 
hm = defaultdict(int) 
l = r = 0 
res = 0
while r < len(nums):
    hm[nums[r]] += 1
    if hm[nums[r]] == 1:
        cnt += 1
    while cnt > k:
        hm[nums[l]] -= 1
        if hm[nums[l]] == 0:
            cnt -= 1
        l += 1
    res = max(res, r - l + 1)
    r += 1
print(res)

Q3

回文串

时间限制: 3000MS

内存限制: 589824KB

题目描述:

现在小美获得了一个字符串。小美想要使得这个字符串是回文串。

小美找到了你。你可以将字符串中至多两个位置改为任意小写英文字符’a’-‘z’

你的任务是帮助小美在当前制约下,获得字典序最小的回文字符串。

数据保证能在题目限制下形成回文字符串。

注:回文字符串:即一个字符串从前向后和从后向前是完全一致的字符串。

例如字符串abcba, aaaa, acca都是回文字符串。字符串abcd, acea都不是回文字符串。

输入描述

一行,一个字符串。字符串中仅由小写英文字符构成。

保证字符串不会是空字符串。

字符串长度介于 [1, 100000] 之间。

输出描述

一行,一个在题目条件限制下所可以获得的字典序最小的回文字符串。

样例输入

acca

样例输出

aaaa

分类讨论即可

s = input().split()[0]
s = list(s)
l = 0 
r = len(s) - 1
res = 2
tmp = []
while l < r:
    if s[l] != s[r]:
        tmp.append([l,r])
    l += 1
    r -= 1
if len(tmp) == 2:
    s[tmp[0][0]] = min(s[tmp[0][0]],s[tmp[0][1]])
    s[tmp[0][1]] = min(s[tmp[0][0]],s[tmp[0][1]])
    s[tmp[1][0]] = min(s[tmp[1][0]],s[tmp[1][1]])
    s[tmp[1][1]] = min(s[tmp[1][0]],s[tmp[1][1]])
elif len(tmp) == 1:
    c = min(s[tmp[0][0]],s[tmp[0][1]])
    if c != 'a':
        s[tmp[0][0]] = 'a'
        s[tmp[0][1]] = 'a'
    else:
        s[tmp[0][0]] = 'a'
        s[tmp[0][1]] = 'a'
        if len(s) % 2 == 1:
            s[len(s) // 2] = 'a'
else:
    l = 0
    r = len(s) - 1
    cnt = 2
    while cnt > 0 and l <= r:
        if s[l] != 'a':
            s[l] = 'a'
            s[r] = 'a'
            cnt -= 2
        l += 1
        r -= 1
print("".join(s))

Q4

商店

题目描述:

现在商店里有N个物品,每个物品有原价和折扣价。

小美想要购买商品。小美拥有X元,一共Y张折扣券。

小美需要最大化购买商品的数量,并在所购商品数量尽量多的前提下,尽量减少花费。

你的任务是帮助小美求出最优情况下的商品购买数量和花费的钱数。

输入描述

第一行三个整数,以空格分开,分别表示N,X,Y。

接下来N行,每行两个整数,以空格分开,表示一个的原价和折扣价。

1≤N≤100, 1≤X≤5000, 1≤Y≤50,每个商品原价和折扣价均介于[1,50]之间。

输出描述

一行,两个整数,以空格分开。第一个数字表示最多买几个商品,第二个数字表示在满足商品尽量多的前提下所花费的最少的钱数。

样例输入

3 5 1

4 3

3 1

6 5

样例输出

2 5

两个三维dp,python三维度会tle,压缩到二维即可

n, x, y = map(int, input().split())
nums = []
for _ in range(n):
    a, b = map(int, input().split())
    nums.append([a, b])

dp = [[0] * (y + 1) for _ in range(x + 1)]
for i in range(1, n + 1):
    for j in range(x, -1, -1):
        for k in range(y, -1, -1):
            if j >= nums[i - 1][0]:
                dp[j][k] = max(dp[j][k],dp[j - nums[i - 1][0]][k] + 1)
            if j >= nums[i - 1][1] and k != 0:
                dp[j][k] = max(dp[j][k],dp[j - nums[i - 1][1]][k - 1] + 1)
mx = dp[-1][-1]
dp = [[1 << 60] * (y + 1) for _ in range(mx + 1)]
for k in range(y + 1):
    dp[0][k] = 0 
for i in range(1, n + 1):
    for j in range(mx, - 1, - 1):
        for k in range(y, -1, -1):
            dp[j][k] = min(dp[j][k], dp[j - 1][k] + nums[i - 1][0])
            if k != 0:
                dp[j][k] = min(dp[j][k], dp[j - 1][k - 1] + nums[i - 1][1])
    
print(mx, dp[-1][-1])
#做完美团2023秋招笔试,你还好吗##笔试##春招##美团#
全部评论
不知道为啥,我第一题二维前缀和都过不了,直接开摆
3 回复 分享
发布于 2023-03-18 16:15 福建
第一题真**,写了半天没a
1 回复 分享
发布于 2023-03-18 14:18 江苏
佬,想问一下第四题求买的件数花的钱是啥思路,看不懂
点赞 回复 分享
发布于 2023-03-18 15:31 湖北
我第一题暴力,和你一样思路,没a
点赞 回复 分享
发布于 2023-03-18 13:39 北京
第一题能过吗
点赞 回复 分享
发布于 2023-03-18 13:21 湖北

相关推荐

头像 会员标识
08-24 16:06
东南大学 Java
MongoDB&nbsp;面试题分类整理大概翻了下牛客上的mongodb相关的面试八股,基本上问的很少而且也不会很深入,就是问问应用场景或者和其他数据库的比较(确实也没太多东西,感觉很多方面和mysql挺像的,问mysql足够了)。一、MongoDB基础概念与原理基础概念-&nbsp;你了解MongoDB吗?能简单介绍一下MongoDB的特点吗?-&nbsp;MongoDB为什么快?具体体现在哪些方面?-&nbsp;讲一讲MongoDB存储机制是怎样的?-&nbsp;说一下MongoDB的优点,与MySQL相比有什么区别?-&nbsp;mysql和mongodb区别是什么?分别适用于什么场景?-&nbsp;MongoDB的文档原子性实现原理是什么?-&nbsp;你了解BSON格式吗?它与JSON有什么区别?-&nbsp;MongoDB的集合和文档是如何组织的?核心机制-&nbsp;MongoDB写入的过程做了什么事情?Write&nbsp;Concern是什么?-&nbsp;你了解MongoDB的同步性吗?主从复制是如何工作的?-&nbsp;MongoDB的乐观锁是如何实现的?还有其他并发控制机制吗?-&nbsp;MongoDB有索引吗?支持哪些类型的索引?-&nbsp;说一下MySql和MongoDB的索引的区别-&nbsp;MongoDB的查询优化器是如何工作的?-&nbsp;什么是MongoDB的分片(Sharding)?分片键如何选择?-&nbsp;MongoDB的复制集(Replica&nbsp;Set)是什么?如何保证高可用?ID机制-&nbsp;MongoDB的id用的是自增还是自定义的?-&nbsp;ObjectId的结构是怎样的?包含哪些信息?-&nbsp;如何保证分布式环境下ID的唯一性?二、MongoDB应用场景与技术选型业务场景选择-&nbsp;在什么业务场景下你会选择使用文档数据库(如MongoDB),而不是关系型数据库?-&nbsp;在哪些场景下使用MongoDB?比如内容管理、日志存储、实时分析等-&nbsp;为什么在吐槽和文章评论中使用MongoDB而不使用mysql?-&nbsp;MongoDB用来存哪些数据?非结构化数据存储有什么优势?-&nbsp;你为什么用MongoDB,为啥不用mysql存储?-&nbsp;什么情况下不应该选择MongoDB?技术选型对比-&nbsp;mysql,redis,hbase,mongodb技术选型怎么选?-&nbsp;redis与mongodb区别是什么?各自的使用场景是什么?-&nbsp;es和mongodb的区别是什么?在搜索场景下如何选择?-&nbsp;MongoDB与其他NoSQL数据库(如Cassandra、CouchDB)相比有什么特点?CAP理论应用-&nbsp;谈谈你对CAP理论的理解。像Redis、MongoDB、Cassandra这类NoSQL数据库分别是在CAP中做了怎样的取舍?-&nbsp;MongoDB在一致性和可用性之间是如何平衡的?-&nbsp;什么是最终一致性?MongoDB是如何实现的?三、项目实战与集成项目使用经验-&nbsp;你在项目中有没有使用到MongoDB?-&nbsp;你的工程是如何操作MongoDB的?使用的是什么驱动或ORM?-&nbsp;MongoDB你是怎么用的?在架构中承担什么角色?-&nbsp;你们的MongoDB集群是如何部署的?有多少个节点?-&nbsp;在使用MongoDB过程中遇到过什么坑?如何解决的?Spring&nbsp;Data&nbsp;MongoDB-&nbsp;spring&nbsp;data&nbsp;mongodb在项目中如何使用?-&nbsp;你用过MongoDB的聚合框架吗?在Spring中如何实现复杂查询?-&nbsp;如何在Spring&nbsp;Boot中配置MongoDB连接?-&nbsp;MongoDB的事务支持如何在Spring中使用?数据迁移与集成-&nbsp;如何从MySQL迁移数据到MongoDB?-&nbsp;MongoDB与MySQL的数据同步如何实现?-&nbsp;你了解MongoDB的Change&nbsp;Streams吗?四、MongoDB高级特性与优化分库分表-&nbsp;MongoDB做了分库分表的操作吗?-&nbsp;MongoDB的分片策略有哪些?如何选择合适的分片键?-&nbsp;分片后如何处理跨分片查询?-&nbsp;你了解MongoDB的负载均衡机制吗?分页查询-&nbsp;MongoDB分页查询如何保证查询的过程有新数据后分页查不出重复数据?-&nbsp;skip和limit在大数据量下的性能问题如何解决?-&nbsp;你了解游标分页吗?如何实现?性能优化-&nbsp;MongoDB查询性能优化有哪些方法?-&nbsp;如何分析MongoDB的慢查询?-&nbsp;MongoDB的内存管理机制是怎样的?-&nbsp;如何监控MongoDB的性能指标?-&nbsp;MongoDB的读写分离如何实现?数据安全-&nbsp;MongoDB的认证和授权机制是怎样的?-&nbsp;如何对MongoDB中的敏感数据进行加密?-&nbsp;MongoDB的备份和恢复策略是什么?五、特定应用场景深入内容管理场景-&nbsp;如何设计文档结构来优化评论系统的查询性能?-&nbsp;嵌套文档和引用文档在评论系统中如何选择?实时数据处理-&nbsp;MongoDB在实时数据分析中的应用场景有哪些?-&nbsp;如何使用MongoDB存储时间序列数据?-&nbsp;MongoDB的聚合管道在数据处理中如何使用?地理位置数据-&nbsp;MongoDB对地理位置数据的支持如何?-&nbsp;2dsphere索引是什么?如何使用?-&nbsp;如何实现基于位置的查询?
秋招笔面试记录
点赞 评论 收藏
分享
评论
22
68
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务