Java刷题笔记1:最长重复子数组

这篇博客探讨了如何使用Java解决LeetCode上的一个中等难度问题——找到两个整数数组的最长公共子数组。首先介绍了暴力法,虽然简单但效率低下,接着详细解释了如何运用动态规划优化算法,减少了重复判断并提高了效率。最后,博主提到该算法仍有改进空间。
摘要由CSDN通过智能技术生成

Java刷题笔记1:最长重复子数组

题目描述:

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例:

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

点击跳转题目链接

在LeetCode中这题属于中等难度题,一般来说中等难度题无法使用暴力法通过。但是本人头铁,就是想试一试,反正暴力法写起来相对来说是最简单的。当然,最主要的原因是通过暴力法我们能够清楚的感受到算法存在哪些不足、哪些地方可以改进。进而写出令自己满意的代码。

暴力法:

每次我们从A组中选取一个子数组,然后去B组中找到一个与它相同的。我们可以先选取长度为Math.max(A.length,B.length)的子数组,然后慢慢减少长度,直到长度为0.


public static int findLength(int[] A, int[] B) {
   
        //取A中的一个子数组,然后去B中寻找相同的子数组
        int windowSize = Math.min(A.length, B.length);
        while (windowSize > 0) {
   
            int start = 0;//用来记录目前A中子数组的开始下标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值