青训营-豆包MarsCode技术训练营试题解析三十七

news2024/12/12 5:26:18

引言

随着AI领域的发展,底层算法确实起到了决定性的作用。为了跟上这个快速发展的领域,我们需要不断学习和提升自己的技能。刷题是一种很好的方式,可以帮助我们巩固基础知识,提高解决问题的能力。

介绍

‌豆包青训营‌是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目。该项目的目标是培养具有职业竞争力的优秀开发工程师,并提供全程免费的课程,不收取任何费用‌。

课程内容和方向

豆包青训营的课程涵盖前端、后端和AI方向。在这个飞速发展的AI时代,学员将与豆包MarsCode团队一起深入探索技术领域,学习和运用AI,提高编程效率‌。此外,课程还包括大数据方向,适合对大数据感兴趣的学员学习‌,

本文提供训练营试题解析供参考

试题1:最小移动次数使数组相等

问题描述:
小C有两个长度为 N 的数组 A 和 B。他可以进行以下两种操作,来将数组 A 转换为数组 B:

反转数组 A,即使数组 A 的元素顺序完全颠倒。
在 [1, N] 范围内选择一个整数 i,然后可以对 A[i] 添加或减去任意值。
你的任务是帮助小C找到使数组 A 等于数组 B 所需的最小操作次数。

例如:当 N = 3,A = [1, 2, 5],B = [4, 2, 1] 时,最佳操作如下:

第一步反转数组 A,得到新数组 A = [5, 2, 1]。
第二步从位置 1 减去 1,得到新数组 A = [4, 2, 1]。
因此,答案是 2。

def solution(N: int, A: list, B: list) -> int:
    # 辅助函数:计算当前A和B的调整次数
    def count_adjustments(A, B):
        adjustments = 0
        for i in range(N):
            if A[i] != B[i]:
                adjustments += 1
        return adjustments
    
    # 计算不反转时的调整次数
    adjustments_normal = count_adjustments(A, B)
    
    # 反转A
    A_reversed = A[::-1]
    
    # 计算反转后的调整次数
    adjustments_reversed = count_adjustments(A_reversed, B)
    
    # 选择最小的调整次数
    min_operations = min(adjustments_normal, adjustments_reversed + 1)
    
    return min_operations

if __name__ == '__main__':
    print(solution(N = 3, A = [1, 2, 5], B = [4, 2, 1]) == 2)
    print(solution(N = 4, A = [7, 8, 6, 2], B = [6, 2, 8, 7]) == 3)
    print(solution(N = 2, A = [3, 9], B = [9, 3]) == 1)

试题2:环形数组最大子数组和问题

问题描述:
小C有一个长度为 n 的环形整数数组 nums,他希望找到该数组中的非空子数组的最大可能和。环形数组的特点是它的末端和开头相连,形式上,nums[i] 的下一个元素是 nums[(i + 1) % n],而 nums[i] 的前一个元素是 nums[(i - 1 + n) % n]。

你需要帮助小C找到这个环形数组的最大子数组和,注意每个元素最多只能在子数组中出现一次,子数组是连续的,并且子数组可以跨越数组的末端连接到开头。

def solution(nums: list) -> int:
    
    def kadane(arr):
        max_ending_here = max_so_far = arr[0]
        for x in arr[1:]:
            max_ending_here = max(x, max_ending_here + x)
            max_so_far = max(max_so_far, max_ending_here)
        return max_so_far

    
    def reverse_kadane(arr):
        min_ending_here = min_so_far = arr[0]
        for x in arr[1:]:
            min_ending_here = min(x, min_ending_here + x)
            min_so_far = min(min_so_far, min_ending_here)
        return min_so_far

    max_subarray_sum = kadane(nums)
    min_subarray_sum = reverse_kadane(nums)
    total_sum = sum(nums)
    if total_sum == min_subarray_sum:
        return max_subarray_sum
    return max(max_subarray_sum, total_sum - min_subarray_sum)

if __name__ == '__main__':
    print(solution([-1, -2, 3, -2]) == 3)
    print(solution([-5, -3, 5]) == 5)
    print(solution([-3, -1, 2, -1]) == 2)
    print(solution([-2, -3, -1]) == -1)

试题3:连续子数组零尾数问题

问题描述:
小F正在研究一个数组,并想要计算出其中的连续子数组的某种特性。给定一个整数数组,你需要编写一个函数来返回乘积末尾零的数量大于等于 x 的连续子数组的数量。

由于答案可能非常大,你需要将结果对 10^9 + 7 取模后再返回。

def solution(a: list, x: int) -> int:
    MOD = 10**9 + 7
    
    # 计算每个数包含的因子2和因子5的数量
    def count_factors(num):
        count2, count5 = 0, 0
        while num % 2 == 0:
            num //= 2
            count2 += 1
        while num % 5 == 0:
            num //= 5
            count5 += 1
        return count2, count5
    
    # 初始化前缀和数组
    prefix2 = [0] * (len(a) + 1)
    prefix5 = [0] * (len(a) + 1)
    
    # 填充前缀和数组
    for i in range(len(a)):
        count2, count5 = count_factors(a[i])
        prefix2[i + 1] = prefix2[i] + count2
        prefix5[i + 1] = prefix5[i] + count5
    
    # 统计满足条件的子数组数量
    result = 0
    for i in range(len(a)):
        for j in range(i, len(a)):
            # 计算子数组[i, j]中因子2和因子5的数量
            count2 = prefix2[j + 1] - prefix2[i]
            count5 = prefix5[j + 1] - prefix5[i]
            # 判断是否满足条件
            if min(count2, count5) >= x:
                result += 1
    
    return result % MOD

if __name__ == '__main__':
    print(solution(a = [5, 2, 3, 50, 4], x = 2) == 6)
    print(solution(a = [10, 5, 2, 1], x = 3) == 0)
    print(solution(a = [25, 4, 8], x = 1) == 2)

试题4:数列差异的最小化

问题描述:
在这里插入图片描述

#include <iostream>
#include <vector>
#include <limits.h> // 提供 INT_MAX
#include <cmath> // 提供 abs 函数

int solution(int n, int m, int k, std::vector<int>& a, std::vector<int>& b) {
    int min_value = INT_MAX; // 初始化最小值为一个很大的数
    long long k_squared = (long long)k * k; // 计算 k 的平方,使用 long long 防止溢出

    // 遍历所有可能的 a[i] 和 b[j] 的组合
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            long long diff = a[i] - b[j]; // 计算差值
            long long value = diff * diff; // 计算差值的平方
            long long result = std::abs(value - k_squared); // 计算 |(a[i] - b[j])^2 - k^2| 的绝对值
            if (result < min_value) {
                min_value = result; // 更新最小值
            }
        }
    }

    return min_value; // 返回最小值
}

int main() {
    // You can add more test cases here
    // case 1
    std::vector<int> a1 = {5, 3, 4, 1, 2};
    std::vector<int> b1 = {0, 6, 7, 9, 8};
    std::cout << (solution(5, 5, 1, a1, b1) == 0) << std::endl;

    // case 2
    std::vector<int> a2 = {5, 3, 4, 1, 2};
    std::vector<int> b2 = {0, 6, 7, 9, 8};
    std::cout << (solution(5, 5, 0, a2, b2) == 1) << std::endl;

    // case 3
    std::vector<int> a3 = {5, 3, 4, 1, 2};
    std::vector<int> b3 = {0, 6, 7, 9, 8, 11};
    std::cout << (solution(5, 6, 3, a3, b3) == 0) << std::endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2258055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openlayers地图缓存添加

//通过安装包localforage&#xff08;npm install localforage&#xff09;或https://cdnjs.cloudflare.com/ajax/libs/localforage/1.10.0/localforage.min.js tileCacheStore.js import localforage from localforage var tileCacheStorenull;// 从缓存中获取该瓦片 functio…

《IP 电话:选型指南与应用优势》

《IP 电话&#xff1a;选型指南与应用优势》 一、IP 电话概述二、IP 电话的选型1. 功能与应用2. 性能及可靠性3. 兼容及可升级性4. 外观设计及管理需求5. 性价比 三、IP 电话的应用场景1. 企业办公2. 工厂和仓库3. 酒店和旅游业4. 医疗机构5. 零售业6. 教育机构7. 个人用户 四、…

解决Logitech G hub 无法进入一直转圈的方案(2024.12)

如果你不是最新版本无法加载尝试以下方案&#xff1a;删除AppData 文件夹下的logihub文件夹 具体路径&#xff1a;用户名根据实际你的请情况修改 C:\Users\Administrator\AppData\Local 如果你有通过lua编译脚本&#xff0c;记得备份&#xff01;&#xff01; ↓如果你是最新…

[网络爬虫] Jsoup : HTML 解析工具

1 概述 简介 Jsoup是一款基于Java的HTML解析器&#xff0c;它提供了一种简单、灵活且易于使用的API&#xff0c;用于从URL、文件或字符串中解析HTML文档。它可以帮助开发人员从HTML文档中提取数据、操作DOM元素、处理表单提交等。 主要特点 Jsoup的主要特点包括&#xff1a; 简…

top命令和系统负载

1 top中的字段说明 top是一个实时系统监视工具&#xff0c;可以动态展现出 CPU 使用率、内存使用情况、进程状态等信息&#xff0c;注意这些显示的文本不能直接使用 > 追加到文件中。 [rootvv~]# top -bn 1 | head top - 20:08:28 up 138 days, 10:29, 4 users, load av…

golang实现简单的redis服务4(实现过期时间功能)

为什么要做过期时间?redis失效时间是如何做的redis有那些过期策略,优缺点,实现原理?redis使用的什么方案 redis 有那些内存淘汰策略?常用的是什么,为什么?noeviction: 不处理lru: 未使用时间最久的keylfu: 使用次数最少的keyrandom: 随机keyvolatile与allkeys的区别 仓库地…

VMware:如何在CentOS7上开启22端口

打开虚拟机&#xff1a;【编辑】【虚拟机网络设置】 其中填入的虚拟机IP地址是虚拟机中centos的IP地址&#xff0c;虚拟机端口为需要映射的centos端口 配置好之后保存&#xff0c;打开宿主机 win cmd telnet 192.168.1.26 22 如果出现上述窗口&#xff0c;则说明已经成功开放…

项目中使用AntV L7地图(五)添加飞线

项目中使用AntV L7地图&#xff0c;添加 飞线 文档地址&#xff1a;https://l7.antv.antgroup.com/zh/examples/line/animate/#trip_animate 一、初始化地图 使用的地图文件为四川地图JSON&#xff0c;下载地址:https://datav.aliyun.com/portal/school/atlas/area_selector#&…

基于FPGA的智能电子密码指纹锁(开源全免)

基于FPGA的智能电子密码指纹锁 一、功能描述硬件资源需求 二、整体框架知识准备AS608指纹模块4*4数字键盘模块 三、Verilog代码实现以及仿真验证1.AS608_data模块2.check_hand模块3.four_four_key模块4.check_mima模块5.change_mima模块6.seg_ctrl模块7.uart_top模块8.key_debo…

【Vue2+Element-ui】el-dialog宽度适配

1、不适配问题 分辨率100%-页面 分辨率150%-页面 在项目中&#xff0c;我开发分辨率一直是100%&#xff0c;但是客户使用的分辨率不相同&#xff0c;所以宽度要适配 2、解决-封装mixins.js 1)、封装的mixins 我将宽度设置成动态的&#xff0c;因为我的项目中需求不同。 expor…

css矩形样式,两边圆形

废话不多说&#xff0c;代码如下&#xff0c;直接拷贝即可使用&#xff1a; index.vue文件 <template><view class"wrap"><view class"tabs"><view class"tab active"><view class"name">标签</view…

【OpenCV】图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

使用微信小程序调用飞桨PaddleX平台自行训练的模型——微信小程序用训练的牡丹花模型Demo测试

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Wordpress设置固定链接形式后出现404错误

比如固定连接设置为 /archives/%post_id%.html 这种形式&#xff0c;看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态

JavaWeb学习--cookie和session,实现登录的记住我和验证码功能

目录 &#xff08;一&#xff09;Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​&#xff08;Cookie的生命&#xff09; &#xff08;二&#xff09; Cookie的API 1.创建Cookie&#xff1a;new 构造方法 2.保存到客户端浏…

Linux网络测试指令

Ping Ping命令是一个网络工具&#xff0c;用于测试主机之间的可达性。它通过发送ICMP&#xff08;Internet Control Message Protocol&#xff09;回声请求消息到目标主机&#xff0c;并等待接收ICMP回声应答消息来判断目标是否可达以及测量往返时间。Ping命令对于诊断网络连接…

【伪代码】数据结构-期末复习 线性表

目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1&#xff0e;构造空表 2&#xff0e;插入 3&#xff0e;删除 4&#xff0e;定位 顺序表的优点&#xff1a; 顺序表的缺点&#xff1a; 例…

<C++11> 智能指针

目录 前言 C11和boost中智能指针的关系 一、智能指针的使用及原理 1. 智能指针介绍 2. 智能指针的使用 3. 智能指针的原理 二、C中的智能指针 1. auto_ptr 2. unique_ptr 3. shared_ptr std::shared_ptr的基本设计 shared_ptr的线程安全问题 定制删除器 4. weak_ptr shared_pt…

书生实战营第四期-进阶岛第六关-MindSearch 快速部署

一、开发环境配置 1、打开codespace主页&#xff0c;选择Blank模板进行创建 Codespaces 2、创建conda环境隔离并安装依赖 conda create -n mindsearch python3.10 -y conda init 因为是新建的codespace&#xff0c;在第一次创建conda环境时&#xff0c;需要conda init 然后再…

ViT学习笔记(二) Patch+Position Embedding阶段的详细推演与理解

我认为讲得最好的一个文章&#xff1a;Vision Transformer详解-CSDN博客 有很多文章&#xff0c;自己并没有完全正确理解。 我的笔记&#xff0c;以ViT的标准应用为例&#xff1a; • 输入图像&#xff1a;输入图像的尺寸是224x224&#xff0c;且是RGB图像&#xff0c;因此输…