LeetCode:718最长重复子数组 C语言

该文章描述了一个编程问题,要求在两个整数数组中找到最长的公共子数组长度,通过动态规划方法实现,利用二维数组dp存储子问题解并更新最大值。
摘要由CSDN通过智能技术生成

718. 最长重复子数组

提示

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。

示例 2:

输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 100

int findLength(int* nums1, int nums1Size, int* nums2, int nums2Size) {

    int dp[nums1Size+1][nums2Size+1];

    //dp[i][j]

    int i,j,max=0;

    //初始化

    for(i=0;i<nums1Size;i++){

        dp[i][0]=0;

    }

    for(j=0;j<nums2Size;j++){

        dp[0][j]=0;

    }

    //递推公式

    for(i=1;i<=nums1Size;i++){

        for(j=1;j<=nums2Size;j++){

            if(nums1[i-1] == nums2[j-1]){

                dp[i][j] = dp[i-1][j-1]+1;

            }

            else

            dp[i][j] =0;

            max = max > dp[i][j] ? max :dp[i][j];

        }

    }

    return max;

}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值