第六届字节跳动青训营第十课 | 豆包MarsCode AI 刷题

65 阅读3分钟

题目要求对一个字符串进行特殊排序,该字符串只包含三种字符类型:字母(大小写)、数字和问号。排序规则如下:

  1. 问号的原始位置必须保持不变:问号在字符串中的位置不能改变。
  2. 数字的原始位置必须保持不变,但数字要按照从大到小排序:数字在字符串中的位置不能改变,但所有数字需要按照从大到小的顺序重新排列。
  3. 字母的原始位置必须保持不变,但字母要按照字典序从小到大排序:字母在字符串中的位置不能改变,但所有字母需要按照字典序从小到大的顺序重新排列。

示例

样例1:

输入:**inp = "12A?zc"**
输出:**'21A?cz'**

样例2:

输入:**inp = "1Ad?z?t24"**
输出:**'4Ad?t?z21'**

样例3:

输入:**inp = "???123??zxy?"**
输出:**'???321??xyz?'**

def solution(inp):
    # Edit your code here
    num = []
    chars = []
    res = []
    for c in inp:
        if "0" <= c <= "9":
            res.append('n')
            num.append(int(c))
        elif c == "?":
            res.append("?")
        else:
            res.append("c")
            chars.append(ord(c))
    num.sort(reverse=True)
    chars.sort()
    j, k = 0, 0
    for i in range(len(res)):
        if res[i] == "n":
            res[i] = str(num[j])
            j += 1
        elif res[i] == "c":
            res[i] = chr(chars[k])
            k += 1

    # print("".join(res))
    return "".join(res)


if __name__ == "__main__":
    # Add your test cases here

    print(solution("12A?zc") == "21A?cz")
    print(solution("1Ad?z?t24") == "4Ad?t?z21")
    print(solution("???123??zxy?") == "???321??xyz?")

找出最长神奇数列

题目要求在一个由 **0****1** 组成的正整数序列中,找到最长的「神奇数列」。「神奇数列」的定义是:序列中的 **1****0** 交替出现,且至少由 3 个连续的 **0****1** 组成的部分数列。如果有多个神奇数列,那么输出最先出现的一个。

例如:

  • 输入:**inp = "0101011101"**
  • 输出:**'010101'**

解释:在这个序列中,最长的神奇数列是 **010101**,因为它由 **0****1** 交替出现,且长度为 6,大于 3。

def solution(inp):
    # Edit your code here
    i = 0
    temp = int(inp[i])
    const = 0
    res = 0
    for j in range(len(inp)):
        if int(inp[j]) == temp:
            const += 1
            temp = 1 - temp
            if const > res:
                # print(const)
                res = const
                # print(res)
                i = j - const + 1
                # print(i)
        else:
            const = 1
            temp = 1 - int(inp[j])

    # print(inp[i:i+res])
    if res < 3:
        return ""
    return inp[i:i+res]


if __name__ == "__main__":
    # Add your test cases here

    print(solution("0101011101") == "010101")

为什么需要Redis

  • 数据从单表,演进出了分库分表
  • mysql 从单机演进出了集群
    • 数据量增长
    • 数据读写压力不断增加
  • 数据分冷热
    • 热数据:经常被访问到的数据
  • 将热数据存储到内存中

Redis基本工作原理

  • 数据从内存中读写
  • 数据保存到硬盘上防止重启数据丢失
    • 增量数据保存到AOF文件
    • 全量数据RDB文件
  • 单线程处理所有操作命令
  • setnx 并不能完全保证高可用分布式锁实现

Redis使用注意事项

大Key、热key