Leetcode打卡:查询数组中元素出现的位置

执行结果:通过

题目 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;

}

解题思路:

  1. 参数解释 :
    • int* nums: 指向整数数组的指针,该数组包含一系列整数。
    • int numsSize: 数组 nums 的大小(即包含的元素数量)。
    • int* queries: 指向查询数组的指针,该数组包含一系列位置索引。
    • int queriesSize: 查询数组 queries 的大小(即包含的位置索引数量)。
    • int x: 需要查找的元素值。
    • int* returnSize: 指向一个整数的指针,用于存储返回结果数组的大小。
  2. 步骤解析 :
    • 步骤1 : 分配内存给 indices 数组。这个数组将用于存储元素 xnums 中出现的所有索引位置。分配的内存大小为 numsSize * sizeof(int),因为 indices 数组的每个元素都是 int 类型。

    • 步骤2 : 遍历 nums 数组,找到所有等于 x 的元素的索引,并将这些索引存储在 indices 数组中。indicesSize 用于记录当前已经存储的索引数量。

    • 步骤3 : 分配内存给 res 数组。这个数组将用于存储查询结果。分配的内存大小为 queriesSize * sizeof(int),因为 res 数组的每个元素都是 int 类型。

    • 步骤4 : 设置 *returnSizequeriesSize,表示返回结果数组的大小与查询数组的大小相同。

    • 步骤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 数组,它包含了所有查询的结果。

相关推荐
moonrailgun25 分钟前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
罗西的思考1 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体
人工智能·算法·机器学习
lvwangshu2 小时前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
后台模板学习2 小时前
2026最新面试真题:到达用英语怎么说背后的逻辑与源码剖析
面试·职场和发展·php
CoderYanger2 小时前
前端基础——JavaScript(WebAPI)(下篇)
java·开发语言·前端·javascript·程序人生·面试·职场和发展
302wanger2 小时前
干与湿:AI 拿走脑力之后,人剩下什么
算法
计算机编程-吉哥3 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554954 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao4 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing4 小时前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法