青训营X豆包MarsCode技术训练营第二课 | 豆包MarsCode AI刷题

29 阅读3分钟

问题:超市里的货物架调整

问题描述 在一个超市里,有一个包含nn个格子的货物架,每个格子中放有一种商品,商品用小写字母a到z表示,当顾客进入超市时,他们会依次从第一个格子查找到第nn个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。 输入变量说明: • n:货物架的格子数 • m:顾客想要购买的商品种类数 • s:货物架上商品的初始顺序 • c:顾客想要购买的商品种类

代码实现

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static int solution(int n, int m, String s, String c) {
        // 统计每种商品的需求量
        Map<Character, Integer> demand = new HashMap<>();
        for (char ch : c.toCharArray()) {
            demand.put(ch, demand.getOrDefault(ch, 0) + 1);
        }

        // 统计货架上每种商品的数量
        Map<Character, Integer> stock = new HashMap<>();
        for (char ch : s.toCharArray()) {
            stock.put(ch, stock.getOrDefault(ch, 0) + 1);
        }

        // 计算可以卖出的商品数量
        int sold = 0;
        for (char ch : demand.keySet()) {
            if (stock.containsKey(ch)) {
                sold += Math.min(demand.get(ch), stock.get(ch));
            }
        }

        return sold;
    }

    public static void main(String[] args) {
        System.out.println(solution(3, 4, "abc", "abcd") == 3);
        System.out.println(solution(4, 2, "abbc", "bb") == 2);
        System.out.println(solution(5, 4, "bcdea", "abcd") == 4);
    }
}

代码解释

  1. 导入必要的包

    import java.util.HashMap;
    import java.util.Map;
    

    这里导入了 HashMapMap,用于存储商品的需求量和库存量。

  2. 定义 Main

    public class Main {
    

    这是 Java 程序的主类,包含 solution 方法和 main 方法。

  3. 定义 solution 方法

    public static int solution(int n, int m, String s, String c) {
    

    这个方法接收四个参数:

    • n:货架的格子数
    • m:顾客想要购买的商品种类数
    • s:货架上商品的初始顺序
    • c:顾客想要购买的商品种类
  4. 统计每种商品的需求量

    Map<Character, Integer> demand = new HashMap<>();
    for (char ch : c.toCharArray()) {
        demand.put(ch, demand.getOrDefault(ch, 0) + 1);
    }
    

    使用 HashMap 统计每种商品的需求量。getOrDefault 方法用于获取当前商品的需求量,如果商品不存在则返回默认值 0,然后加 1

  5. 统计货架上每种商品的数量

    Map<Character, Integer> stock = new HashMap<>();
    for (char ch : s.toCharArray()) {
        stock.put(ch, stock.getOrDefault(ch, 0) + 1);
    }
    

需求统计:我们首先统计每种商品的需求量,使用 Map<Character, Integer> 来存储。 库存统计:然后统计货架上每种商品的数量,同样使用 Map<Character, Integer> 来存储。 计算售出数量:最后,我们计算可以卖出的商品数量。对于每种商品,我们取需求量和库存量的最小值,累加得到最终的售出数量。 这个解决方案的时间复杂度为 O(n + m),其中 n 是货架上的商品数量,m 是顾客的需求种类数。