百度3.30编程1题:数字跳跃

牛牛很喜欢在数字序列中跳跃
从1号位置,每次可以向后跳一步或跳到往后任意一个与该位置数字相同的位置,问最少几次跳到尾部。
备注:30% N<= 10 ,100% 1<=N<=10^5
in:
5
01212
out: 3
1. 动态规划 + 二维dp数组, 空间复杂度:n^2, 时间复杂度:O(n^2)
第一反应就是这个,二维dp数组存第i位到第j位的步数;这样dp[i][j] = (num[i] == num[j])? 1 : min(dp[i+1][j], dp[i][j-1]) +1;
代码就不贴了,只通过了30%,提示空间复杂度太大了

2. 动态规划 + 一维dp数组,空间复杂度:n, 时间复杂度:O(n^2)
为了减小空间,将二维数组缩小到一维数组,令i从N-1开始慢慢到0,循环N次后就可以得到从0到N-1的最小步数
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int N;
    cin>>N;
    char lis[N];
    for(int i=0;i<N;i++){
        cin>> lis[i];
    }
    int left,down;
    int dp[N];
    for(int i=N-1; i>=0;i--){
        dp[i] = 0;
        for(int j=i+1; j<N;j++){
            if(lis[i] == lis[j]) {
                    dp[j] = 1;
            }
            else{
                dp[j] = min(dp[j-1] , dp[j]) +1 ;
            }
        }
    }
    cout<<dp[N-1]<<endl;
    return 0;
}

3. 动态规划 + 辅助数组 + 一维dp数组,空间复杂度:n,时间复杂度:O(n)
有一个可以利用的点,就是数字相同就可以一步到位,所以用一个辅助数组dp1来存储从位置0开始到index的数字最少需要dp1[index]步;这样对于dp每次判断的时候就可以先看看能不能直接跳跃了
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int N;
    cin>>N;
    int nums[N];
    char c;
    for(int i=0;i<N;i++){
        cin>> c;
        nums[i] = c-'0';
    }
    int dp1[10];
    fill(dp1,dp1+10,INT_MAX);
    int dp[N];

    dp[0] = 0;
    dp1[nums[0]] = 0;

    for(int i=1;i<N;i++){
        dp[i] = min(dp[i-1],dp1[nums[i]]) +1;
        dp1[nums[i]] = min(dp1[nums[i]], dp[i]);
    }
    cout<<dp[N-1]<<endl;
    return 0;
}
#笔试题目##百度#
全部评论

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务