3159. 查询数组中元素的出现位置

给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。

对于每个查询 queries[i] ,你需要找到 nums 中第 queries[i] 个 x 的位置,并返回它的下标。如果数组中 x 的出现次数少于 queries[i] ,该查询的答案为 -1 。

请你返回一个整数数组 answer ,包含所有查询的答案。

示例 1:

输入:nums = [1,3,1,7], queries = [1,3,2,4], x = 1

输出:[0,-1,2,-1]

解释:

第 1 个查询,第一个 1 出现在下标 0 处。
第 2 个查询,nums 中只有两个 1 ,所以答案为 -1 。
第 3 个查询,第二个 1 出现在下标 2 处。
第 4 个查询,nums 中只有两个 1 ,所以答案为 -1 。
示例 2:

输入:nums = [1,2,3], queries = [10], x = 5

输出:[-1]

解释:

第 1 个查询,nums 中没有 5 ,所以答案为 -1 。

提示:

1 <= nums.length, queries.length <= 105
1 <= queries[i] <= 105
1 <= nums[i], x <= 104

解题思路:
这段描述说明了一个查询任务的要求。具体来说,对于给定的数组 nums 和查询数组 queries,你需要完成以下任务:
1.查询数组 queries:这个数组中的每个元素 queries[i] 表示你需要在数组 nums 中找到第 queries[i] 个出现的某个特定值 x 的位置。
2.查找第 queries[i] 个 x:对于每个查询 queries[i],你需要在 nums 中找到第 queries[i] 次出现的值 x 的下标。
3.返回结果:
如果 nums 中 x 出现的次数大于或等于 queries[i],则返回 x 的第 queries[i] 次出现的位置(下标)。
如果 nums 中 x 出现的次数少于 queries[i],则返回 -1,表示无法找到第 queries[i] 个 x。
举个例子来说明:
假设 nums = [1, 2, 3, 2, 4, 2],x = 2,queries = [1, 2, 3, 4]。
对于 queries[0] = 1,你需要找到 nums 中第 1 个 2 的位置,结果是 1(因为 nums[1] = 2)。
对于 queries[1] = 2,你需要找到 nums 中第 2 个 2 的位置,结果是 3(因为 nums[3] = 2)。
对于 queries[2] = 3,你需要找到 nums 中第 3 个 2 的位置,结果是 5(因为 nums[5] = 2)。
对于 queries[3] = 4,你需要找到 nums 中第 4 个 2 的位置,但 nums 中只有 3 个 2,所以结果是 -1。

完整代码:
    class Solution {
      /**
       * 查询数组中元素的出现位置。
       * 
       * @param nums 输入的整数数组。
       * @param queries 查询数组,每个查询表示要查找的第 n 次出现的位置。
       * @param x 要查询的特定元素。
       * @return 返回一个整数数组,每个元素表示对应查询中元素 x 的第 n 次出现的位置。如果不足 n 次,则返回 -1。
       */
      public int[] occurrencesOfElement(int[] nums, int[] queries, int x) {
          // 构建索引映射,存储元素 x 在数组中的所有出现位置
          Map<Integer, List<Integer>> indexMap = new HashMap<>();
          for (int i = 0; i < nums.length; i++) {
              if (nums[i] == x) {
                  indexMap.computeIfAbsent(x, k -> new ArrayList<>()).add(i);
              }
          }

          // 处理每个查询,获取元素 x 的第 n 次出现位置
          int[] result = new int[queries.length];
          for (int i = 0; i < queries.length; i++) {
              List<Integer> indices = indexMap.getOrDefault(x, new ArrayList<>());
              if (indices.size() >= queries[i]) {
                  result[i] = indices.get(queries[i] - 1);
              } else {
                  result[i] = -1;
              }
          }
          return result;
      }
  }
posted @   JAVA-CHENG  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示