#青训营笔记创作活动

113 阅读3分钟

得到2一斤.鱼 干反,向这是最遍历基本的要求:。使用然后另一个, `我思考了 如何循环处理从等级倒差异的问题。数第二只通过猫正开始向,和比较反当前向猫两次和遍后历一只,猫可以的确保等级每只,更新猫鱼干的鱼数量干。分配
满足
####题目中的 两个代码规则优化。

在代码
正中向,遍我们历使用了##两个确保了 ``: 猫猫循环得到星球更多的来上的鱼确保鱼每干干,只分配但猫可能会问题的遗鱼
漏干
一些数量####情况满足 ,条件问题比如。背景在这种
正双在遍向遍历猫历时的方法星球虽然,上某简单,只,小但在猫R的某些负责鱼情况下给干可能一行数量会有可能排性能被队的上的低估瓶颈猫。了分。如果发因此猫鱼的数量,干反非常大。向,每遍可以只历考虑使用猫是必要的更有一个,高效等级它可以的数据,修正结构等级这些或越遗算法高的漏来猫优化的情况应该,。得到确保

更多的####鱼只 猫干的测试。鱼样规则干例如下分配分析:是

公平通过的1测试。样.

,每在我们可以只实现验证猫过程中代码至少,的得到我发现正确一斤反性鱼向:遍
干历时-。需要 **
使用样2 **猫####例3 的代码**等级实现:高于 前```n一只java =猫 ,import2 java那么0当前.,util cats猫._的ArrayListlevels鱼 =;干 数量import [1应该 java,比. 前util2一只.,List猫 ;2多 ,一斤 。public3这样可以 class,确保 Main 等级 {3高的 ,猫 得到 public2 static更多的0 int,鱼 solution干1(。int, n 3,2. List, ** 反<Integer3向>, cats遍 _3历levels,**) : {2从 ,倒 数 //1第二 ,初始只 5化猫鱼,开始 干,分配6如果,数当前组 猫6,每,的只 等级猫5高于至少,后分配 一只15猫斤,, 7那么 int,当前[] 猫 fish7的 =,鱼 new 干 int4数量]应该[n];比, 输出后 一只 for3猫 (5多int i。一斤 =通过。 正这样可以向0确保;和等级 i反高的 向< n遍猫;历得到 i,更多的++)我们可以鱼得到 {干 每 只, fish猫并且的修正[i鱼正干] =向数量 为遍1 历;中[1 可能 , } 遗 2漏 ,的情况 。 //1 ,正 向2####遍, 历 数据1,结构确保,每选择 只6 猫,-的 鱼1干,数组:分配 满足2使用条件,一个 数 3组, for ( int1fish i, = 来 21,存储; 每 i1 只,< n 猫2;分配, i到的++) 鱼3 { 干, 数量 if1。 (,数cats 组_2的下levels,标 .对应get1(,猫i 的)2编号 >,, cats 数_3levels,. get1]组的值(i对应 -,分配 总的1和))为鱼 { 干 3数量 5。 fish`
。 代码实现 import java.util.ArrayList; import java.util.List;

public class Main { public static int solution(int n, List cats_levels) { // 初始化鱼干分配数组,每只猫至少分配1斤 int[] fish = new int[n]; for (int i = 0; i < n; i++) { fish[i] = 1; }

    // 正向遍历,确保每只猫的鱼干分配满足条件
    for (int i = 1; i < n; i++) {
        if (cats_levels.get(i) > cats_levels.get(i - 1)) {
            fish[i] = fish[i - 1] + 1;
        }
    }

    // 反向遍历,再次确保每只猫的鱼干分配满足条件
    for (int i = n - 2; i >= 0; i--) {
        if (cats_levels.get(i) > cats_levels.get(i + 1)) {
            fish[i] = Math.max(fish[i], fish[i + 1] + 1);
        }
    }

    // 计算总鱼干数量
    int totalFish = 0;
    for (int i = 0; i < n; i++) {
        totalFish += fish[i];
    }

    return totalFish;
}
public static void main(String[] args) {
    List<Integer> catsLevels1 = new ArrayList<>();
    catsLevels1.add(1);
    catsLevels1.add(2);
    catsLevels1.add(2);

    List<Integer> catsLevels2 = new ArrayList<>();
    catsLevels2.add(6);
    catsLevels2.add(5);
    catsLevels2.add(4);
    catsLevels2.add(3);
    catsLevels2.add(2);
    catsLevels2.add(16);

    List<Integer> catsLevels3 = new ArrayList<>();
    catsLevels3.add(1);
    catsLevels3.add(2);
    catsLevels3.add(2);
    catsLevels3.add(3);
    catsLevels3.add(3);
    catsLevels3.add(20);
    catsLevels3.add(1);
    catsLevels3.add(2);
    catsLevels3.add(3);
    catsLevels3.add(3);
    catsLevels3.add(2);
    catsLevels3.add(1);
    catsLevels3.add(5);
    catsLevels3.add(6);
    catsLevels3.add(6);
    catsLevels3.add(5);
    catsLevels3.add(5);
    catsLevels3.add(7);
    catsLevels3.add(7);
    catsLevels3.add(4);

    System.out.println(solution(3, catsLevels1) == 4);
    System.out.println(solution(6, catsLevels2) == 17);
    System.out.println(solution(20, catsLevels3) == 35);
}

}