写点什么

【LeetCode】统计匹配检索规则的物品数量 Java 题解

作者:Albert
  • 2022-11-17
    北京
  • 本文字数:1051 字

    阅读完需:约 3 分钟

题目描述

给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。


另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。


如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :


ruleKey == "type" 且 ruleValue == typei 。ruleKey == "color" 且 ruleValue == colori 。ruleKey == "name" 且 ruleValue == namei 。统计并返回 匹配检索规则的物品数量 。


示例 1:
输入:items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]], ruleKey = "color", ruleValue = "silver"输出:1解释:只有一件物品匹配检索规则,这件物品是 ["computer","silver","lenovo"] 。
示例 2:
输入:items = [["phone","blue","pixel"],["computer","silver","phone"],["phone","gold","iphone"]], ruleKey = "type", ruleValue = "phone"输出:2解释:只有两件物品匹配检索规则,这两件物品分别是 ["phone","blue","pixel"] 和 ["phone","gold","iphone"] 。注意,["computer","silver","phone"] 未匹配检索规则。
复制代码

思路分析

  • 今天的算法题目是列表类型题目。题目比较长,需要我们统计并返回 匹配检索规则的物品数量。首先分析题目,给出的 items[i] = [typei, colori, namei],是按照规定好的顺序排列的,我们可以使用一个 map,将每一个分类做对应,比如:type -> 0, color -> 1,name -> 2。完成这一步 map 计算之后,我们继续可以直接根据给出的 ruleKey 分类,找到对应的值。然后在将获取到的值与 ruleValue 做比较,找出符合题目要求的数量并统计。

  • 具体实现代码如下,供参考。

通过代码

class Solution {    public int countMatches(List<List<String>> items, String ruleKey, String ruleValue) {        int ans = 0;        Map<String, Integer> map = new HashMap<>();        map.put("type", 0);        map.put("color", 1);        map.put("name", 2);        Integer idx = map.get(ruleKey);        for (List<String> item : items) {            if (item.get(idx).equals(ruleValue)) {                ans++;            }        }
return ans; }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 今天这个题目相对容易,主要考察的是 hashMap 的使用,hashMap 主要采用的是空间换时间的思想,来提升我们的计算效率。这个题目一个考察的小点是包装类比较使用 equals,比较的是对象的内容。

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 3
用户头像

Albert

关注

数据结构和算法爱好者 2019-09-29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】统计匹配检索规则的物品数量Java题解_算法_Albert_InfoQ写作社区