力扣链接:3159. 查询数组中元素的出现位置
力扣难度
中等
算法评级: 2 知道常用数据结构和算法并简单使用
难度分 1263
题目: 给你一个整数数组 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 。
func occurrencesOfElement(nums, queries []int, x int) []int {
}
func occurrencesOfElement(nums, queries []int, x int) []int {
queryLen := len(queries)
ans := make([]int, queryLen)
// 定义一个切片 indexList,用于存储目标元素 x 在 nums 数组中的所有索引位置
var indexList []int
// 遍历 nums 数组
for i, v := range nums {
// 如果当前元素 v 等于目标元素 x
if v == x {
// 将当前元素的索引 i 添加到 indexList 切片中
indexList = append(indexList, i)
}
}
// 遍历查询数组 queries
for i, v := range queries {
// 如果查询值 v 大于 indexList 切片的长度,说明查询的位置超出了目标元素 x 出现的次数
if v > len(indexList) {
// 在结果数组 ans 的对应位置存入 -1
ans[i] = -1
} else {
// 在结果数组 ans 的对应位置存入 indexList 中索引为 v-1 的值
ans[i] = indexList[v-1]
}
}
return ans
}