贪心猫的鱼干大分配

67 阅读1分钟

我记得这个和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);

    }
}