job

携程2025届算法笔试

coding to XieCheng

Posted by Kylin on March 28, 2024

[TOC]

3.28 算法

选择题

  • 下列关于XGBoost模型说法错误的是(A)

    A XGBoost模型基学习器可以是线性分类器,比如线性回归与逻辑回归

    B XGBoost支持模型上的并行

    C XGBoost损失函数用到了二阶导数通常用来增加优化精度

    D XGBoost损失函数加入了正则项,用于控制模型复杂度

  • 下列关于线性回归正则化说法错误的是(D) A 线性回归模型加上正则化项,使得模型不能过于复杂,防止了模型过拟合 B 线性回归L1正则化称为LASSO回归,L2正则化称为Ridge回归 C LASSO回归与Ridge回归在一定程度上发挥了筛选特征的作用 D LASSO回归参数大多比较接近于0,但是都不等于0;Ridge回归参数大多变为0

  • 从一个未知均值和方差的正态分布中抽样出三个样本1,2,3,4,那么 的极大似然估计大约是多少?其中 P(X>2)。

    $\phi$(0.45)

    $\phi$(0.35)

    $\phi$(0.25)

    $\phi$(0.15)

  • 下列关于朴素贝叶斯模型说法错误的是(C)

    A朴素贝叶斯模型假设所有特征相互独立

    B 属于生成式模型

    C 高斯朴素贝叶斯模型适合用于样本特征为离散型

    D 朴素贝叶斯模型对类别不平衡数据也能有效分类

(不定项)

  • 在二分类的情况下,下列关于类别不平衡问题的描述中,说法正确的是(除了5)

    (1) 数据层面有简单上下采样和样本生成的策略。

    (2)极度不平衡的二分类场景下,可以将二分类问题转化为异常检测问题。

    (3) 利用上采样,可以模拟对样本加权。

    (4)模型集成可以削弱样本不平衡带来的影响。

    (5)在少数类样本较多的情况下,即使它的数量远小于多数类样本,样本不平衡也不是个很大的问题。

  •   决策树是机器学习中经常使用的分类器。决策树有三种常用的启发式数据构造准则,下列选项中,关于这三种常用的构造启发式算法,结论正确的是(AD)
    A ID3 算法只能处理离散变量
    B ID3算法和C4.5算法只能用于分类任务
    C ID3 算法和 C4.5算法对缺失值比较敏感,而 CART 自带缺失值处理策略
    D CART 每个结点只会产生两个分支,形成一颗二叉树
  • 决策树有三种常用的启发式生成算法,这三种算法各有自己的特点和适用条件。下列选项中,对于这三种算法的比较,结论错误的是(AB)


    A ID3 算法和C4.5 要求输入的特征数据是离散的

    B ID3 算法生成的是多叉树,而C4.5和 CART 生成的是二叉树

    C ID3 算法对缺失值比较敏感,而C4.5和 CART 可以对缺失值进行不同方式的处理 D CART 处理连续型变量时,通过对数据排序后找到类别不同的分割线作为切分点,然后根据切分点把连续数值变为布尔型

OJ

Q1

游游希望你输出n个”you”,第一个正序输出,第二个倒序,第三个正序.•以此类推。你能帮帮她吗?

输入描述

一个正整数n 1≤n≤10^5

输出描述

一个字符串,代表游游输出的字符串。

A1
n = int(input())

you = ["you","uoy"]
res = ""
for i in range(n):
    res+=you[i%2]
print(res)

Q2

游游拿到了一个 01 矩阵,她每次操作可以选择一个1*2(1行2列,不能2行1列)的区域,将所有字符都变成1。游游想知道,将所有字符都变成1需要最少操作多少次?

输入描述

第一行输入两个正整数n,m,用空格隔开。

接下来的n行,每行输入一个长度为m的01 串,代表游游拿到的矩阵。

2 ≤n,m≤1000

输出描述

一个整数,代表游游的最小操作次数。

示例1

输入

3 3
111
111
111

输出

0
A2
n,m = map(int,input().split())
nums = []
for i in range(n):
    st = input()
    num = []
    for s in st:
        if s=='0':
            num.append(0)
        else:
            num.append(1)
    nums.append(num)

# print(nums)
res = 0
for i in range(n):
    for j in range(m):
        if nums[i][j]==0:
            res+=1
            nums[i][j]=1
            if j+1<m:
                nums[i][j+1]=1
print(res)

Q3

游游拿到了一个数组,她可以进行最多一次操作:选择一个元素全是偶数的区间,使这个区间所有元素除以2。

游游希望最终所有元素之和尽可能大,你能帮帮她吗?

输入描述

第一行输入一个正整数n,代表数组的大小。

第二行输入n个整数a_i,代表数组的元素。

1≤n≤10^5

-10^9≤a_i≤10^9

输出描述

一个整数,代表最终所有元素之和的最大值。

示例 1

输入

5
8 -4 2 -6 -5

输出

-1

说明

选择区间[-4, 2,-6]即可,操作后数组变成[8,-2, 1,-3,-5]。

A3

Q4

游游拿到了n个正整数a_i,她希望你求出这些数的阶乘全部乘在一起生成的大数有多少个因子。你能帮帮她吗?

输入描述

第一行输入一个正整数 。

第二行输入n个正整数a_i,用空格隔开。

1≤n ≤ 200000

1≤ai ≤ 10^6

输出描述

一个整数,代表这个乘积的因子数量,由于答案可能过大,请对10^9+7取模。

示例1

输入

3
1 2 3

输出

6

说明

1!*2!*3!=1*2*6=12,共有1,2,3,4,6,12六个因子。

A4