执行结果:通过

题目 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
代码以及解题思路
 
代码
 
int* occurrencesOfElement(int* nums, int numsSize, int* queries, int queriesSize, int x, int* returnSize) {
    int* indices = (int*)malloc(numsSize * sizeof(int));
    int indicesSize = 0;
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] == x) {
            indices[indicesSize++] = i;
        }
    }
    int* res = (int*)malloc(queriesSize * sizeof(int));
    *returnSize = queriesSize;
    for (int i = 0; i < queriesSize; i++) {
        if (indicesSize < queries[i]) {
            res[i] = -1;
        } else {
            res[i] = indices[queries[i] - 1];
        }
    }
    free(indices);
    return res;
}解题思路:
- 参数解释: 
  - int* nums: 指向整数数组的指针,该数组包含一系列整数。
- int numsSize: 数组- nums的大小(即包含的元素数量)。
- int* queries: 指向查询数组的指针,该数组包含一系列位置索引。
- int queriesSize: 查询数组- queries的大小(即包含的位置索引数量)。
- int x: 需要查找的元素值。
- int* returnSize: 指向一个整数的指针,用于存储返回结果数组的大小。
 
- 步骤解析: 
  -  步骤1: 分配内存给 indices数组。这个数组将用于存储元素x在nums中出现的所有索引位置。分配的内存大小为numsSize * sizeof(int),因为indices数组的每个元素都是int类型。
-  步骤2: 遍历 nums数组,找到所有等于x的元素的索引,并将这些索引存储在indices数组中。indicesSize用于记录当前已经存储的索引数量。
-  步骤3: 分配内存给 res数组。这个数组将用于存储查询结果。分配的内存大小为queriesSize * sizeof(int),因为res数组的每个元素都是int类型。
-  步骤4: 设置 *returnSize为queriesSize,表示返回结果数组的大小与查询数组的大小相同。
-  步骤5: 遍历 queries数组,对于每个查询位置queries[i]:- 如果 indicesSize(即元素x出现的次数)小于queries[i],说明查询的位置超出了元素x实际出现的次数,因此将-1存储在res[i]中。
- 否则,由于 queries数组中的索引是从 1 开始的(题目可能假设如此,因为直接使用了queries[i] - 1),需要将查询位置减 1 后从indices数组中取出对应的位置索引,存储在res[i]中。
 
- 如果 
-  步骤6: 释放 indices数组分配的内存,因为它不再需要。
-  步骤7: 返回 res数组,它包含了所有查询的结果。
 
-  



















