美团2023.8.12场秋招笔试算法题

一:外卖订单

认真处理特殊情况即可 

二:小美的字符串匹配度

前缀和+双指针

三: 小美的树上染色

树型dp

 四:小美的排列询问

哈希表

五:小美的排列构造

 六:小美的字符串变换

并查集 + 遍历

n = int(input())
origin = list(input())
res = float('inf')


class UF:
    def __init__(self, n) -> None:
        self.parent = []
        self.index = []
        for i in range(n):
            self.parent.append(i)
            self.index.append(i)

    def find(self, x) -> int:
        if x != self.parent[x]:
            x = self.find(self.parent[self.parent[x]])
        return x

    def union(self, x, y) -> None:
        px = self.find(x)
        py = self.find(y)
        if px == py: return
        self.parent[py] = px


def solve(grid) -> int:
    n = len(grid)
    m = len(grid[0])
    uf = UF(n * m)
    ret = set()

    for r in range(n):
        for c in range(m):
            for x, y in [[r-1, c], [r+1, c], [r, c-1], [r, c+1]]:
                if 0 <= x < n and 0 <= y < m:
                    if grid[r][c] == grid[x][y]:
                        uf.union(r*m + c, x*m + y)
    for i in range(n*m):
        ret.add(uf.find(i))

    return len(ret)


for r in range(1, n):  # r行c列
    if n % r == 0:
        c = n // r
        grid = []
        for i in range(r):
            grid.append(origin[i*c: i*c + c])
        res = min(res, solve(grid))
        
if n == 1:
    print(1)
else:
    print(res)

七:切蛋糕

八: 小美的好矩阵

这题暴力只能过90%的例子呜呜呜

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值