超市里的货物架调整(javascript版)-豆包marscode算法刷题

113 阅读2分钟

问题描述

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

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

  • 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

题解

function solution(n, m, s, c) {
     // 创建一个计数器来记录每种商品的需求量
     const demand = {};
     for (let item of c) {
         if (demand[item]) {
             demand[item]++;
         } else {
             demand[item] = 1;
         }
     }
 
     // 创建一个数组来存储调整后的商品顺序
     const adjustedShelf = [];
 
     // 遍历初始顺序,将顾客想要的商品按需添加到调整后的顺序中
     for (let item of s) {
         if (demand[item] && demand[item] > 0) {
             adjustedShelf.push(item);
             demand[item]--;
         }
     }
 
     // 返回调整后的顺序中商品的数量,即为最多可以卖出的商品数量
     return adjustedShelf.length;
}

function main() {
    console.log(solution(3, 4, "abc", "abcd") === 3);
    console.log(solution(4, 2, "abbc", "bb") === 2);
    console.log(solution(5, 4, "bcdea", "abcd") === 4);
}

main();

解题思路

为了最大化销售商品的数量,我们需要根据顾客想要购买的商品种类来调整货物架上的商品顺序。具体来说,我们应该将顾客想要购买的商品尽可能地放在货物架的前面,并且按照顾客购买的顺序排列。

  1. 需求计数

    • 使用一个对象demand来记录每种商品的需求量。
  2. 调整商品顺序

    • 遍历初始商品顺序s,将顾客想要的商品按需添加到调整后的顺序adjustedShelf中,并减少相应的需求量。
  3. 返回结果

    • 返回调整后的顺序中商品的数量,即为最多可以卖出的商品数量。

这种方法确保了我们尽可能多地满足顾客的需求,从而最大化销售数量。