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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具