超市里的货物架调整|豆包MarsCode AI刷题

51 阅读3分钟

问题描述

在一个超市里,有一个包含 𝑛 个格子的货物架,每个格子中放有一种商品,商品用小写字母 a 到 z 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 𝑛 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。

作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:

  • n:货物架的格子数
  • m:顾客想要购买的商品种类数
  • s:货物架上商品的初始顺序
  • c:顾客想要购买的商品种类

测试样例

样例1:

输入:n = 3 ,m = 4 ,s = "abc" ,c = "abcd"
输出:3

样例2:

输入:n = 4 ,m = 2 ,s = "abbc" ,c = "bb"
输出:2

样例3:

输入:n = 5 ,m = 4 ,s = "bcdea" ,c = "abcd"
输出:4

问题分析

  1. 理解问题

    • 你需要在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。
    • 每个顾客只会购买他们想要的商品中的一种,并且一旦找到就会离开。
    • 你需要计算在最优调整下,最多可以卖出多少件商品。
  2. 数据结构选择

    • 你可以使用一个数组或列表来表示货物架上的商品顺序。
    • 使用一个集合来存储顾客想要购买的商品种类。
  3. 算法步骤

    • 统计每种商品在货架上的数量。
    • 根据顾客想要购买的商品种类,优先将这些商品放在货架的前面。
    • 计算最多可以卖出多少件商品。

下面是我写的代码(java)

import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static int solution(int n , int m , String s1 , String s2) {
        HashMap<Character , Integer>map = new HashMap<>();
        for(char i = 'a'; i <= 'z';i++)
            map.put(i , 0);
        for(int i = 0; i < s1.length();i++)
        {
            map.put(s1.charAt(i) , map.get(s1.charAt(i)) + 1);
        }
        int ans = 0;
        for(int i = 0; i < s2.length();i++)
        {
            if(map.get(s2.charAt(i)) > 0)
            {
                ans++;
                map.put(s2.charAt(i) , map.get(s2.charAt(i)) - 1);
            }
        }
        return ans;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n , m;
        String s1 , s2;
        n = scanner.nextInt();
        m = scanner.nextInt();
        s1 = scanner.nextLine();
        s2 = scanner.nextLine();
        System.out.println(solution(n , m , s1 , s2));
    }
}

关键操作分析

  • HashMap:创建一个HashMap用于统计货架中对应种类的货品共有多少组,以及统计顾客们对应的需求
  • 对于顾客需求的货品种类,一方面ans++,另一方面让对应map中存储的数据减一,作为货品被该顾客买走一个的象征
  • 最后输出ans即为所求

写在最后

这道题如果使用HashMap这个数据结构用法的话,可以极大减少运算量,更好的题目难度,更好的解答题目