题解 | #填充数组#NC173#C

填充数组

https://www.nowcoder.com/practice/3e34d9ed0bbc4db68b6fbca20a62926d

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param a int整型一维数组 
 * @param aLen int a数组长度
 * @param k int整型 
 * @return int整型
 */
int FillArray(int* a, int aLen, int k ) {
    // write code here
    long f[aLen][k];                  //一个数组来保存会用到的值 第二行为需要填充两个数。第2列表示有两个数可以填充
    int mod=1000000007;
    int i=1,j=0,m=0;                      //关于数组(i,j),i个数,j个值.第i个为max,(i-1,j)种。为max-1,有(i-1,j-1)种。为max-2,有(i-1,j-2)种。直至(i-1,1)手工写下这个数组,会发现如19行表示。
    for(j=0;j<k;j++){f[0][j]=i;i++;}               //第一行赋值为1,2,3,4,5,6.。。
    for(i=1;i<aLen;i++){f[i][0]=1;}                  //第一列赋值为1,1,1,1,1,
    for(i=1;i<aLen;i++){                              //根据输入的参数,确定可能会用到的f[i][j];
        for(j=1;j<k;j++){
            f[i][j]=(f[i-1][j]+f[i][j-1])%mod;            //mod防止溢出
        }
    }
    printf("%ld %ld",f[1][4],f[aLen-1][k-1]);
    int r=0,l=0,l1=0,l2=0,num=1,flag=0;
    for(i=0;i<aLen;i++){                          //外层循环判断数组里的树,主要为了找零
        flag=0;
        j=i;
        while(a[j]==0&&j<aLen){                   //为了找连续为零的个数
            j++;
            flag=1;                                  //跳出while的时候,j是连续零后面的序号
        }
        if(flag==1){                               //有零就找
            if(i==0){                               //l为了确定前面数组里的列(值的个数),
               l1=1;
            }else{
               l1=a[i-1];                            //值的下限,注意,下限最小为1
             }

            if(j==aLen){
               l2=k;
            }
            else{
                l2=a[j];                          //值的上限,
            }
            l=l2-l1;                                //值
            r=j-i-1;                                //填充个数
            num=(num*f[r][l])%mod;                   //mod防止溢出
        }
        i=j;
    }
    return num;
}

全部评论

相关推荐

04-10 11:02
已编辑
北方民族大学 全栈开发
“无名小卒,还是名扬天下?”我知道很多人都不觉得我能走到今天这一步,当然,也包括我自己。在我的人生里,有两部作品刻下了最深的烙印:《斗破苍穹》与《龙族》。它们总被人拿来对照:一边是萧炎的桀骜轻狂,一边是路明非的怯懦衰颓。有人说,天蚕土豆没见过魂天帝,但江南见过真凯撒。我时常觉得,自己就是那个衰小孩路明非。可路明非可以开挂,我不可以;我也无数次幻想过,能拥有萧炎那般年少轻狂的人生,可我没有他与生俱来的逆天天赋。我只是个平庸的普通人,一个看过《斗破苍穹》却开不了挂的路明非,只能一步一步往上爬。从我下定决心找实习的那一刻起,我就给自己定下了目标:“我一定要为字节跳动卖命.jpg”。萧炎有他的三年之约,我有我的两年半之约(其实是一年半)。2024.11.20,科大讯飞的第一封实习offer落进邮箱,我迈出了这场奔赴的第一步。2025.8.18,放弃百度转正的安稳机会,转身走进前路未卜的不确定里。我很感谢我在百度的mentor,是她从茫茫人海选中了我,给了我大厂实习的机会。即便有段时间我状态差、产出不理想,她依旧愿意认可我、希望我留下转正。2025.11.14,我选择走进字节跳动,以实习生的身份重新出发。2026.3.25&nbsp;-&nbsp;3.31,一周速通上海飞书,幸遇赏识我的伯乐,斩获Special&nbsp;Offer。被告知面试通过的那一刻,我的内心无比平静,就像这个offer本就该属于我。不是侥幸,是应得的。这一路,有人看轻过我的出身,不相信我能走到这里;也有人在我看不见前路的时候,替我举过灯。没有他们的鼓励与支撑,就没有今天站在这里的我。我看到了自强不息的激荡,那是一个双非的伟大乐章!我是雨夜迈巴赫,我要开启属于我的新篇章了。
在看牛客的本杰明很勇...:真心祝贺l总 我永远的偶像 我滴神
春招至今,你收到几个面试...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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