华为笔试题OD

文章提供了两道华为的在线测试(OD)题目。第一题涉及数组子数组的优雅阈值计算,采用滑动窗口思路解决。第二题是关于银行客户插队问题,利用优先级队列处理。

华为笔试题OD

1题 华为od-2022.11.5-k优雅阈值

题目内容

如果一个数组中出现次数最多的元素出现大于等于 �k 次, 被称为 �−优雅数组k−优雅数组 , �k 也可以被称为优雅阈值。

例如,数组 [1,2,3,1,2,3,1][1,2,3,1,2,3,1] ,它是个 3−优雅数组3−优雅数组 ,因为元素 11 出现次数大于等于 33 次,数组 [1,2,3,1,2][1,2,3,1,2] 就不是一个 3−优雅数组3−优雅数组, 因为其中出现次数最多的元素是 11 和 22 ,只出现了 22 次。

给定一个数组 �A 和 �k ,请求出 �A 有多少子数组是 �−优雅子数组k−优雅子数组 。

子数组是数组中一个或多个连续元素组成的数组。

例如,数组 [1,2,3,4][1,2,3,4] 包含 1010 个子数组,分别是: [1][1] , [1,2][1,2] , [1,2,3][1,2,3] , [1,2,3,4][1,2,3,4] , [2][2] , [2,3][2,3] , [2,3,4][2,3,4] , [3][3] ,[3,4][3,4] , [4][4]

输入描述

第一行输入两个整数 �≤10000n≤10000 和 �≤�kn 。 1≤��≤�1≤a**in

第二行输入 �n 个整数。

输出描述

输出给定的数组中有多少子数组是 �−优雅子数组k−优雅子数组

样例

输入

7 3
1 2 3 1 2 3 1

[Copy](javascript:😉

输出

1

思路

滑动窗口思想,首先我们定义2个指针,分别为左指针和右指针,我们右指针依次遍历元素,如果某一个元素出现的个数大于等于k了,那么就记录当前符合要求的是(数组长度 - 右指针下标),然后左指针自加1然后在判断右指针所在的元素出现的个数是否满足出现个数大于等于k,如果满足就在+1,一直重复此操作,直到不符合要求。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class P1 {
   
   
    public static void main(String[] args) {
   
   
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
   
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇塞大嘴好帅(DaZuiZui)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值