帆软笔试(后台开发工程师 2023/8/10)

编程题目两道(动态规划+数据库查询)

1、假设可以用一个字符串表示某植物的DNA,对该植物进行不同剂量辐射可以修改他的DNA值,从而培育出新的品种。

#其中:

插入一个DNA字符的时间消耗为x天

删除一个DNA字符的时间消耗为y天

替换一个DNA字符的时间消耗为z天

那么请设计一个函数,计算该植物品种A培育成品种B最快需要多少天,输入参数依次为:

字符串A,字符串B,正整数X,正整数y,正整数z

注意:用例中替换的代价有可能会高于插入删除之和,也可能小于插入删除之和。

样例1:

输入数据: virusA =“finereport”,virusB =“fanruan666”

x=2,y=4,z=5

期望输出: 36

ac代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int min(int a, int b, int c) {
    return min(a, min(b, c));
}

int solution(string virusA, string virusB, int x, int y, int z) {
    int m = virusA.size();
    int n = virusB.size();

    vector<vector<int>> dp(m + 1, vector<int>(n + 1));

    for (int i = 0; i <= m; ++i) {
        for (int j = 0; j <= n; ++j) {
            if (i == 0)
                dp[i][j] = j * x;
            else if (j == 0)
                dp[i][j] = i * y;
            else if (virusA[i - 1] == virusB[j - 1])
                dp[i][j] = dp[i - 1][j - 1];
            else
                dp[i][j] = min(dp[i - 1][j - 1] + z,
                               min(dp[i][j - 1] + x, dp[i - 1][j] + y));
        }
    }

    return dp[m][n];
}

int main() {
    string virusA = "finereport";
    string virusB = "fanruan666";
    int x = 2;
    int y = 4;
    int z = 5;

    int result = solution(virusA, virusB, x, y, z);
    cout << "Minimum days needed: " << result << endl;

    return 0;
}

2、编写一条 SQL,查找 test 表中重复 2 次及以上的车牌

id car

1 苏412345

2 苏A12346

3 苏412346

4 苏A12347

5 苏A12347

输出:

car

苏A12346

苏A12347

SELECT car
FROM test
GROUP BY car
HAVING COUNT(*) >= 2;

全部评论
题目都一样的,还有人没考啊,你这发出来别人直接cv了
1
送花
回复
分享
发布于 2023-08-10 13:38 江苏
啥时候投的老哥
点赞
送花
回复
分享
发布于 2023-08-10 12:38 辽宁
秋招专场
校招火热招聘中
官网直投

相关推荐

10 40 评论
分享
牛客网
牛客企业服务