当前位置: 首页 > article >正文

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 <= 10^5
  • 1 <= queries[i] <= 10^5
  • 1 <= nums[i], x <= 10^4

分析:先遍历一次数组,把所有x出现的下标全部记录下来。第二次遍历,按照查询的顺序把对应下标存到ans数组中即可。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* occurrencesOfElement(int* nums, int numsSize, int* queries, int queriesSize, int x, int* returnSize) {
    int cnt[numsSize+5];
    for(int i=0;i<numsSize;++i)
        cnt[i]=0;
    int index=1,t=0;
    for(int i=0;i<numsSize;++i)
        if(nums[i]==x)cnt[index++]=i;
    int *ans=(int*)malloc(sizeof(int)*queriesSize);
    for(int i=0;i<queriesSize;++i)
    {
        if(queries[i]<index)ans[t++]=cnt[queries[i]];
        else ans[t++]=-1;
    }
    *returnSize=t;
    return ans;
}


http://www.kler.cn/a/454772.html

相关文章:

  • OCR实践-Table-Transformer
  • vue css box-shadow transition实现类似游戏中的模糊圈游走的感觉
  • 如何增加多行内容到文件
  • 07-01-指针与数组
  • 开发微信小程序的过程与心得
  • 技术文档的语言表达:简洁、准确与易懂的艺术
  • RDFS—RDF模型属性扩展解析
  • 分布式事务入门 一
  • 一种寻路的应用
  • 期权懂|期权入门知识:如何选择期权合约?
  • 1.1、Python3基础语法
  • GitLab的安装与卸载
  • 解决 vue3 中 echarts图表在el-dialog中显示问题
  • leetcode hot100 腐烂的橘子
  • zabbix5.0版本(安装部署+添加服务器+拆分数据库)
  • 产品初探Devops!以及AI如何赋能Devops?
  • 3-Linux 用户管理入门
  • 路由器刷机TP-Link tp-link-WDR566 路由器升级宽带速度
  • VMware安装CentOS 7
  • Spring 容器与配置类
  • 面试题整理19----Metric的几种类型?分别是什么?
  • 一文快速预览经典深度学习模型(二)——迁移学习、半监督学习、图神经网络(GNN)、联邦学习
  • 输入输出流 - cin, cout 的使用
  • 6、MHA
  • 【WRF模拟】如何得到更佳的WRF模拟效果?
  • Lockpass(密码管理器) v0.0.14