bilibili为爱翻车事件

三道编程题, 最后一道必须C++实现, 提前邮件通知了,满心欢喜把本地调通的的代码,复制到上面, 才注意到,翻车了, mmp

完全不会C++;第二道题,本地调通了, 换了几种方法, 本地反馈相当迅速, 复制到牛客, 用例不通过,估计是时间超时了,但是我坚信代码可以很迅速在规定时间内完成,应该是牛客对python不友好, 是它们的bug。第一题完全ok。三十到选择完全ok,难,但是完全可以接受。

编程题, 占坑

2019年9月15日 16点18分 填坑

1.给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?

解法:

假设 N=由 区间 [a,a+k-1] 累加得到 等差数列 首项为 a ,项数 为 k

其中 a>=1,k>=1 且都为整数

N=(a+a+k-1)*k/2

N=2a*k/2 + (k-1)*k/2

-> a*k=N-(k-1)*k/2

-> (k-1)*k/2

def find_sort(N):
    if N <= 2:
        return 1
    res = 0
    for i in range(1, N):
        m = N - i * (i - 1) / 2
        if m <= 0:
            break
        if m % i == 0:
            res += 1
    return res

 

 

 

给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。

问题:

给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。

你总共三种操作方法:

1、插入一个字符

2、删除一个字符

3、替换一个字符

格式:

输入行输入两个字符串 word1 和 word2,最后输出将 word1 转换为 word2的最少操作次数。

例如:
输入

word1 = "mart"

word2 = "karma"

输出

 

def minDis(word1, word2):

    m = len(word1) + 1
    n = len(word2) + 1
    dp = [[0 for i in range(n)] for j in range(m)]

    for i in range(n):
        # 确定列数
        dp[0][i] = i

    for i in range(m):
        dp[i][0] = i
    for i in range(1, n):
        # 先遍历纵坐标
        for j in range(1, m):
            # 在遍历横坐标   注意 dp[横坐标][纵坐标]
            dp[j][i] = min(dp[j-1][i], dp[j][i-1], dp[j-1][i-1]) + (0 if word1[j-1] == word2[i-1] else 1)
            # 不写括号里的, 也可以这么写
            # if word1[i - 1] != word2[j - 1]:
            #     dp[i][j] += 1
    return dp[m - 1][n - 1]
# 递归方法
# def d(m, n):
#
#     if m == 0 or n == 0:
#         return abs(m - n)
#     if word1[m - 1] == word2[n - 1]:
#         return d(m - 1, n - 1)
#     else:
#         return min([d(m, n - 1) + 1, d(m - 1, n) + 1, d(m - 1, n - 1) + 1])


if __name__ == "__main__":
    word1 = "mart"
    word2 = "karma"
    print(minDis(word1, word2))
    # print(d(len(word1), len(word2)))

bilibili为爱翻车事件_第1张图片

 

https://blog.csdn.net/bbbeoy/article/details/79613826

 

 

 

 

 

你可能感兴趣的:(算法,面劫)