我记得这个和leetcode的某道题很像,我们可以创建一个大小n的数组arr记录每只猫的鱼干数。这里就是那只比他左右两边的猫的等级大的猫有点难处理。因为这只猫的鱼干是两边的猫的鱼干数的最大值。正序遍历时,猫的等级可以递增也可以递减,对于递增我们可以将鱼干数量也增加,对于递减我们可以逆序遍历,这样就变成递增的了。然后在逆序遍历时选最大值赋给arra[]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static int solution(int n, List<Integer> cats_levels) {
int[] arr=new int[n];
int i,j;
for(i=0;i<n;i++){
arr[i]=1;
}
for(i=1;i<n;i++){
if(cats_levels.get(i)>cats_levels.get(i-1)){
arr[i]=arr[i-1]+1;
}
}
for(i=n-1;i>0;i--){
if(cats_levels.get(i-1)>cats_levels.get(i)){
j=arr[i]+1;
if(arr[i-1]<j){
arr[i-1]=j;
}
}
}
int res=0;
for (int i1 : arr) {
res+=i1;
}
System.out.println(Arrays.toString(arr));
System.out.println(res);
return res;
}
public static void main(String[] args) {
List<Integer> catsLevels4 = new ArrayList<>();
int[] test1={2,8,7,25,1,2,1,13,22,20,10,24,11,8,20,23,9,16};
for (int i : test1) {
catsLevels4.add(i);
}
System.out.println(solution(18,catsLevels4)==32);
}
}