最大递增链


思路:暴力尝试加缓存法

dp是从简单状态推到复杂位置的过程,
这个模型位置相互依赖不好推导,用傻缓存就好
  public int solution(int[][] grids){
        int ans=0;
        int[][] dp=new int[grids.length][grids[0].length];
        for(int i=0;i=0 && grids[i-1][j] >grids[i][j]){
            next1=process(grids,i-1,j,dp);
        }
        if(i+1grids[i][j]){
            next2=process(grids,i+1,j,dp);
        }

        if(j-1>=0 && grids[i][j-1] >grids[i][j]){
            next3=process(grids,i,j-1,dp);
        }

        if(j+1grids[i][j]){
            next4=process(grids,i,j+1,dp);
        }


        int ans= 1+ Math.max(Math.max(next1,next2),Math.max(next3,next4));
        dp[i][j]=ans;
        return  ans;

    }

674. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

class Solution {
   public int findLengthOfLCIS(int[] nums) {
        int ans=0;
        int[] dp=new int[nums.length];
        for(int i=0;inums[i]){
            next=process2(nums,i+1,dp);
        }
        int ans= 1+next;
        dp[i]=ans;
        return ans;
    }
}
dp2

相关