最大递增链
思路:暴力尝试加缓存法
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+1 grids[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+1 grids[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; } }