帆软笔试(后台开发工程师 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-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10 40 评论
分享
牛客网
牛客企业服务