2023 阿里淘天笔试题 阿里笔试 0920

笔试时间:2023年9月20日 秋招

第一题

题目:小红的子数组权值

小红拿到了一个数组。她定义一个连续子数组的权值为: 子数组内不同元素的个数。小红想知道,权值分别为1,2,3,...,n的子数组数量

有多少个?

输入描述

第一行输入一个正整数,代表数组的元素数量;

第二行输入n个正整数a;,代表小红拿到的数组。

1 <= n, ai <= 2000

输出描述

n个整数,分别代表权值为1,2,3,...,n的子数组数量。

样例输入

4

1 2 2 3

样例输出

5 4 1 0

参考题解

模拟,枚举每个元素作为起点,从右插入到set中。直接用一个集合进行模拟即可,最后对集合的大小进行统计。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <unordered_set>

using namespace std;
typedef long long ll;
const int N = 2004;

int counts[N];
int numbers[N];
int n;

int main() {
    unordered_set<int> uniqueNumbers;
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        cin >> numbers[i];
    }
    
    for (int i = 1; i <= n; i++) {
        uniqueNumbers.clear();
        for (int j = i; j <= n; j++) {
            uniqueNumbers.insert(numbers[j]);
            counts[uniqueNumbers.size()]++;
        }
    }
    
    for (int i = 1; i <= n; i++) {
        cout << counts[i] << (i == n ? "\n" : " ");
    }
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = 2004;
        int[] counts = new int[N];
        int[] numbers = new int[N];
        int n = scanner.nextInt();

        for (int i = 1; i <= n; i++) {
            numbers[i] = scanner.nextInt();
        }

        for (int i = 1; i <= n; i++) {
            HashSet<Integer> uniqueNumbers = new HashSet<>();
            for (int j = i; j <= n; j++) {
                uniqueNumbers.add(numbers[j]);
                counts[uniqueNumbers.size()]++;
            }
        }

        for (int i = 1; i <= n; i++) {
            System.out.print(counts[i]);
            if (i == n) {
                System.out.println();
            } else {
                System.out.print(" ");
            }
        }
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

N = 2004
counts = [0] * N
numbers = [0] * N
n = int(input())

numbers[1:n+1] = map(int, input().split())

for i in range(1, n + 1):
    uniqueNumbers = set()
    for j in range(i, n + 1):
        uniqueNumbers.add(numbers[j])
        counts[len(uniqueNumbers)] += 1

for i in range(1, n + 1):
    print(counts[i], end=" \n"[i == n])

第二题

题目:平均数大于k的最长子序列

给定n个正整数组成的数组,求平均数大于k的最长子序列的长度。

输入描述

第一行输入两个正整数n和k,用空格隔开;

第二行输入n个正整数ai,用来表示数组。

1 <= n <=

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

最近拿到了正浩的提前批offer感觉自己的实力得到了肯定,也给了我更多底气
搞机墨镜猫:正浩提前批官网好像就只有电力电子软硬件,哥们投的是这两个岗位吗
26届校招投递进展
点赞 评论 收藏
分享
Twilight_m...:还是不够贴近现实,中关村那块60平房子200万怎么可能拿的下来,交个首付还差不多
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务