【秋招突围】2024届秋招笔试-小红书笔试题-第二套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系计划跟新各公司春秋招的笔试题

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注CSDN同名公主号领取,会在飞书进行同步的跟新。

文章目录

    • 📖 写在前面
      • 夏天要来了 秋招还会远吗?
    • 🍊 01.LYA 的魔法宝石
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🌲 02.卢小姐的布料选购计划
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎧 03.LYA 的珍珠项链
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎀 写在最后
    • 🛖 这里介绍一下咱们的笔试打卡小屋
      • 🥰 打卡奖励
      • 🕰 每日学习安排
      • 📖 打卡小屋涉及题型
        • 基础算法
        • 基础数据结构
        • 搜索
        • 动态规划 & 贪心 & 数论

📖 写在前面

夏天要来了 秋招还会远吗?

前不久春招也算是圆满结束咯,大家有拿到心仪的 offer吗?
接下来互联网的秋招也快来啦,小伙伴们有开始准备了吗?
本次给大家带来24届秋招 阿里系 的笔试题目三语言解析(Java/Python/Cpp)

文末有清隆学长的笔试陪伴打卡小屋活动介绍:
✨丰富的打卡奖励等你来领哦,大厂笔试题汇总笔试面试经验贴算法笔试模版
💽 有兴趣的小伙伴们也可以了解一下,不要错过啦~

🍊 01.LYA 的魔法宝石

问题描述

LYA 是一位热爱收藏魔法宝石的女孩。她希望收集 n n n 颗宝石,并且要求这些宝石的魔法值两两不相等。此外,所有宝石的魔法值的最大公约数必须为 k k k

为了尽可能节省购买成本,LYA 希望选择魔法值之和最小的宝石组合。请你帮助 LYA 计算并输出宝石魔法值之和的最小值。

输入格式

输入包含两个正整数 n n n k k k,分别表示宝石的数量和魔法值的最大公约数。

输出格式

输出一个正整数,表示满足条件的宝石魔法值之和的最小值。

样例输入

3 2

样例输出

12

数据范围

1 ≤ n , k ≤ 1 0 5 1 \leq n, k \leq 10^5 1n,k105

题解

本题可以通过构造法来解决。为了让宝石的魔法值之和最小,我们可以将魔法值构造为 k k k 的倍数,并且按照从小到大的顺序选择。

具体步骤如下:

  1. 初始化结果变量 r e s res res 0 0 0,表示宝石魔法值之和。
  2. 1 1 1 n n n 遍历每个宝石:
    • 计算当前宝石的魔法值 t e m p = i × k temp = i \times k temp=i×k
    • t e m p temp temp 累加到结果变量 r e s res res 中。
  3. 输出结果变量 r e s res res 的值。

时间复杂度: O ( n ) O(n) O(n),其中 n n n 为宝石的数量。
空间复杂度: O ( 1 ) O(1) O(1)

参考代码

  • Python
n, k = map(int, input().split())
res = 0
for i in range(1, n + 1):temp = i * kres += temp
print(res)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int k = in.nextInt();long res = 0;for (int i = 1; i <= n; i++) {long temp = i * k;res += temp;}System.out.println(res);}
}
  • Cpp
#include <iostream>
using namespace std;int main() {int n, k;cin >> n >> k;long long res = 0;for (int i = 1; i <= n; i++) {long long temp = i * k;res += temp;}cout << res << endl;return 0;
}

🌲 02.卢小姐的布料选购计划

问题描述

卢小姐是一位服装设计师,她计划从一家面料商那里购买一段布料用于设计新款连衣裙。商家提供了一卷总长为 n n n 米的布料,但其中只有某些区间的布料质地符合要求。

商家允许卢小姐从这卷布料中选择一段长度为 k k k 米的连续区间购买。卢小姐希望在选定的区间内,符合要求的布料段总长度尽可能长。请你帮助卢小姐计算,最优方案下可以购得多少米符合要求的布料。

输入格式

第一行输入三个正整数 n , m , k n,m,k n,m,k,分别代表布卷的总长度、布卷上符合要求的布料段数量以及卢小姐计划购买的布料长度。

接下来的 m m m 行,每行输入两个正整数 l i , r i l_i,r_i li,ri,表示第 i i i 段符合要求的布料的起始位置和终止位置(单位:米)。

输出格式

输出一个整数,表示最优方案下可以购得的符合要求的布料总长度。

样例输入

10 3 6
1 3
4 5
7 9

样例输出

4

数据范围

  • 1 ≤ k ≤ n ≤ 1 0 9 1 \leq k \leq n \leq 10^9 1kn109
  • 1 ≤ m ≤ 1 0 5 1 \leq m \leq 10^5 1m105
  • 0 ≤ l i < r i ≤ n 0 \leq l_i < r_i \leq n 0li<rin
  • 符合要求的布料段之间互不重叠。

题解

本题可以使用双指针滑动窗口的方法求解。我们可以枚举购买布料的左端点,并维护一个右端点,使得当前窗口内的布料长度不超过 k k k。在枚举过程中,我们统计窗口内符合要求的布料段长度之和,并更新答案。

具体步骤如下:

  1. 将所有符合要求的布料段按照起始位置从小到大排序。
  2. 初始化左右指针 l e f t left left r i g h t right right,表示当前枚举的区间范围。
  3. 遍历布料段,将右指针 r i g h t right right 不断右移,直到当前区间长度超过 k k k 或遍历完所有布料段。
  4. 统计当前区间内符合要求的布料段长度之和 c o v e r cover cover,更新答案。
  5. 如果右指针 r i g h t right right 已经到达最后一个布料段,直接更新答案;否则,计算当前区间右端点与下一个布料段左端点之间的空白部分长度 r e m a i n remain remain,更新答案为 m a x ( a n s , c o v e r + r e m a i n ) max(ans,cover+remain) max(ans,cover+remain)
  6. 将左指针 l e f t left left 右移一个布料段,同时将 c o v e r cover cover 减去对应的布料段长度,继续枚举下一个区间。

时间复杂度为 O ( m log ⁡ m ) O(m \log m) O(mlogm),其中排序的时间复杂度为 O ( m log ⁡ m ) O(m \log m) O(mlogm),双指针遍历的时间复杂度为 O ( m ) O(m) O(m)。空间复杂度为 O ( m ) O(m) O(m)

参考代码

  • Python
class Solution:def maxCoverLength(self, n: int, m: int, k: int, segments: List[List[int]]) -> int:segments.sort()ans = cover = 0left = right = 0while right < m:while right < m and segments[right][1] - segments[left][0] <= k:cover += segments[right][1] - segments[right][0]right += 1if right == m:ans = max(ans, cover)else:remain = max(0, segments[left][0] + k - segments[right][0])ans = max(ans, cover + remain)cover -= segments[left][1] - segments[left][0]left += 1return ans
  • Java
class Solution {public int maxCoverLength(int n, int m, int k, int[][] segments) {Arrays.sort(segments, (a, b) -> a[0] - b[0]);int ans = 0, cover = 0;int left = 0, right = 0;while (right < m) {while (right < m && segments[right][1] - segments[left][0] <= k) {cover += segments[right][1] - segments[right][0];right++;}if (right == m) {ans = Math.max(ans, cover);} else {int remain = Math.max(0, segments[left][0] + k - segments[right][0]);ans = Math.max(ans, cover + remain);}cover -= segments[left][1] - segments[left][0];left++;}return ans;}
}
  • Cpp
class Solution {
public:int maxCoverLength(int n, int m, int k, vector<vector<int>>& segments) {sort(segments.begin(), segments.end());int ans = 0, cover = 0;int left = 0, right = 0;while (right < m) {while (right < m && segments[right][1] - segments[left][0] <= k) {cover += segments[right][1] - segments[right][0];right++;}if (right == m) {ans = max(ans, cover);} else {int remain = max(0, segments[left][0] + k - segments[right][0]);ans = max(ans, cover + remain);}cover -= segments[left][1] - segments[left][0];left++;}return ans;}
};

🎧 03.LYA 的珍珠项链

问题描述

LYA 有一条由 n n n 颗不同颜色珍珠串成的项链。她想通过改变其中某一颗珍珠的颜色来提升项链的美观度。根据专家的建议,项链的美观度等于任意连续的珍珠子串中,各颜色出现次数的最大值。

现在给定项链上每颗珍珠的颜色,以及 LYA 可以将某颗珍珠改变成的目标颜色,请你计算改变后项链的最大美观度是多少?

输入格式

第一行包含一个正整数 t t t,表示项链的条数。

接下来对于每条项链,第一行包含两个正整数 n n n c c c,分别表示项链的长度和目标颜色。第二行包含 n n n 个正整数 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_n a1,a2,,an,表示初始时项链上每颗珍珠的颜色。

输出格式

对于每条项链,输出一行一个整数,表示改变后项链的最大美观度。

样例输入

3
5 10
5 -1 -5 -3 2
2 -3
-5 -2
6 10
4 -2 -11 -1 4 -1

样例输出

15
-2
15

数据范围

  • 1 ≤ t ≤ 1 0 5 1 \leq t \leq 10^5 1t105
  • 1 ≤ n ≤ 2 × 1 0 5 1 \leq n \leq 2 \times 10^5 1n2×105
  • − 1 0 9 ≤ c , a i ≤ 1 0 9 -10^9 \leq c, a_i \leq 10^9 109c,ai109
  • 所有项链的总长度不超过 2 × 1 0 5 2 \times 10^5 2×105

题解

本题可以使用动态规划求解。设 d p [ i ] [ 0 ] dp[i][0] dp[i][0] 表示不改变第 i i i 颗珍珠颜色的最大美观度, d p [ i ] [ 1 ] dp[i][1] dp[i][1] 表示将第 i i i 颗珍珠改变为目标颜色的最大美观度。则有以下状态转移方程:

d p [ i ] [ 0 ] = max ⁡ ( d p [ i − 1 ] [ 0 ] + a i , a i ) d p [ i ] [ 1 ] = max ⁡ ( d p [ i − 1 ] [ 0 ] + c , c , d p [ i − 1 ] [ 1 ] + a i , a i ) \begin{aligned} dp[i][0] &= \max(dp[i-1][0] + a_i, a_i) \\ dp[i][1] &= \max(dp[i-1][0] + c, c, dp[i-1][1] + a_i, a_i) \end{aligned} dp[i][0]dp[i][1]=max(dp[i1][0]+ai,ai)=max(dp[i1][0]+c,c,dp[i1][1]+ai,ai)

最终答案为 max ⁡ ( d p [ n − 1 ] [ 0 ] , d p [ n − 1 ] [ 1 ] ) \max(dp[n-1][0], dp[n-1][1]) max(dp[n1][0],dp[n1][1])

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
t = int(input())
for _ in range(t):n, c = map(int, input().split())a = list(map(int, input().split()))dp = [[0] * 2 for _ in range(n)]dp[0][0] = a[0]dp[0][1] = cres = max(dp[0])for i in range(1, n):dp[i][0] = max(dp[i-1][0] + a[i], a[i])dp[i][1] = max(dp[i-1][0] + c, c, dp[i-1][1] + a[i], a[i])res = max(res, dp[i][0], dp[i][1])print(res)
  • Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();while (t-- > 0) {int n = sc.nextInt(), c = sc.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}System.out.println(maxBeauty(a, c));}}private static long maxBeauty(int[] a, int c) {int n = a.length;long[][] dp = new long[n][2];dp[0][0] = a[0];dp[0][1] = c;long res = Math.max(dp[0][0], dp[0][1]);for (int i = 1; i < n; i++) {dp[i][0] = Math.max(dp[i-1][0] + a[i], a[i]);dp[i][1] = Math.max(Math.max(dp[i-1][0] + c, c), Math.max(dp[i-1][1] + a[i], a[i]));res = Math.max(res, Math.max(dp[i][0], dp[i][1]));}return res;}
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;long maxBeauty(vector<int>& a, int c) {int n = a.size();vector<vector<long>> dp(n, vector<long>(2));dp[0][0] = a[0];dp[0][1] = c;long res = max(dp[0][0], dp[0][1]);for (int i = 1; i < n; i++) {dp[i][0] = max(dp[i-1][0] + a[i], (long)a[i]);dp[i][1] = max(max(dp[i-1][0] + c, (long)c), max(dp[i-1][1] + a[i], (long)a[i]));res = max(res, max(dp[i][0], dp[i][1]));}return res;
}int main() {int t;cin >> t;while (t--) {int n, c;cin >> n >> c;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}cout << maxBeauty(a, c) << endl;}return 0;
}

🎀 写在最后

🛖 这里介绍一下咱们的笔试打卡小屋

在这里插入图片描述

✨ 打卡小屋旨在陪伴大家,养成每日学习的好习惯。在这里,你可以:

  • 🤝 与备战笔试的小伙伴相识,找到志同道合的学习小组
  • 📝 通过写题解,巩固做题思路,养成良好的记录习惯
  • 💡 系统掌握常考算法和数据结构,了解互联网笔试难度
  • 🎁 坚持打卡,获得丰厚奖励,激励自己持之以恒

🥰 打卡奖励

打卡时长奖励内容
7天任选一家最新互联网笔试真题 x 1 (价值29.9r)
14天任选一家最新互联网笔试真题 x 3 + 笔试面试经验贴
21天任选一家最新互联网笔试真题 x 5 + 清隆三语言算法模版
28天最新互联网大厂笔试真题汇总(价值199r) + 华为OD机试训练营 (价值89r)

7天打卡即可值回票价,心动不如行动!

🕰 每日学习安排

小屋将在每日上午发放打卡题目,包括:

  • 一道算法模版题,帮助大家掌握常用算法套路
  • 根据算法模版,精选一道对应的大厂笔试真题,巩固算法应用

让我们一起直击笔试重点,攻克常考题型!

📖 打卡小屋涉及题型

小屋从零基础出发,涵盖笔试常考知识点:

基础算法
  • 自定义排序
  • 二分
  • 前缀和
  • 差分
  • 双指针
基础数据结构
  • 栈 & 单调栈
  • 队列 & 单调队列
  • 并查集
  • 优先队列(堆)
搜索
  • DFS & BFS 基础应用
  • 树的遍历
  • 基础图论
动态规划 & 贪心 & 数论
  • 快速幂
  • 组合数
  • 质数 & 因数
  • 位运算
  • 基础动态规划
  • 常见贪心

在这里插入图片描述

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

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

相关文章

诊断解决方案——CANdesc和MICROSAR

文章目录 一、CANdesc二、MICROSAR一、CANdesc canbeded是Vector汽车电子开发软件Nun Autosar标准的工具链之一。 canbeded是以源代码的形式提供的可重用的组件,包括CAN Driver,交互层(IL),网络管理(NM),传输层(TP),诊断层(CANdesc) , 通信测量和标定协议(CCP,XCP) 和 通信控…

404 页面代码

<template> <div class"container"><h1>404</h1> <div ><p class"text-center">当前页面无法访问,可能没有权限或已删除</p><p class"text-center"> 去别处看看吧</p> </div> <…

Internet Download Manager(IDM6.41)软件安装包下载及安装教程

Internet Download Manager有一个智能下载逻辑加速器&#xff0c;具有智能动态文件分割和安全的多部分下载技术&#xff0c;可以加速下载。与其他下载加速器和管理器不同&#xff0c;Internet下载管理器在下载开始之前对文件进行分段&#xff0c;而Internet下载管理器在下载过程…

[Linux] TCP协议介绍(2): TCP协议的“三次握手“过程分析、超时重传机制介绍...

上一篇文章中, 已经介绍了TCP协议的数据格式, 简单分析了其与UDP协议 关于可靠性方面的差异 本篇文章, 介绍分析一下 使用TCP协议通信, 非常重要的一个过程: 三次握手 TCP的"三次握手" TCP协议是有连接的传输层协议, 即使用TCP协议通信, 是需要建立连接的 TCP协议…

JVM-基础知识

JVM-基础知识 什么是JVM JVM是一种跨语言的平台&#xff0c;任何语言只要能编译成.class文件都可以被JVM运行。JVM只和.class文件有关系&#xff0c;和Java语言没关系。JVM是一种虚拟机规范。 java文件是如何交给JVM执行的 JVM的常见实现 HostStop:Oracle官方另外还有IBM的J9、…

Java--Arrays类

1.数组的工具java.util.Arrays 2.由于数组对象本身并没有什么方法可以供我们调用&#xff0c;但API中提供了一个工具类Arrays供我们使用&#xff0c;从而可以对数据对象进行一些基本的操作。 3.查看JDK帮助文档 4.Arrays类中的方法都是static修饰静态的静态方法&…

MyBatis操作数据库(一)

什么是MyBatis? MyBatis是一个优秀的持久层框架&#xff0c;⽤于简化JDBC的开发。 MyBatis本是Apache的⼀个开源项⽬iBatis&#xff0c;2010年这个项目由apache迁移到了googlecode&#xff0c;并且改名为MyBatis。 简单来说MyBatis是更加简单完成数据和数据库交互的框架 什么…

2-6 基于matlab2018B的语音信号降噪和盲源分离GUI界面

基于matlab2018B的语音信号降噪和盲源分离GUI界面&#xff0c;包括维纳滤波&#xff0c;小波降噪、高通、低通、带通滤波&#xff0c;及提出的滤波方法。每个功能均展示降噪前后声音效果并外放出来。程序已调通&#xff0c;可直接运行。 2-6 语音信号降噪 盲源分离 GUI界面 - 小…

canvas学习

Canvas API 提供了一个通过 JavaScript 和 HTML 的 元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas 的基本用法 <canvas> 元素 <canvas id"tutorial" width"150" height"150&quo…

[Python]Anaconda相关命令

环境操作相关命令 查看所有环境 conda env list创建环境 conda create --name cahttts python3.10激活环境 conda activate cahttts安装依赖文件 pip install -r requirements.txt查看GPU型号 nvidia-smi -LGPU 0: NVIDIA A10 (UUID: GPU-9f1fc9cf-582a-25ac-849c-2f77343…

ESD与EOS区别

最近小白在做项目时&#xff0c;被一个实习生问道了&#xff0c;关于EOS与ESD区别。说实话&#xff0c;以前专注于测试debug的我&#xff0c;在回答对方时&#xff0c;并没法做到太全面的解答。于是乎&#xff0c;借助周内的空闲时间&#xff0c;小白还是简单学习总结了一番。 …

Harbor镜像中心搭建

文章目录 Harbor镜像中心搭建前置条件下载Harbor创建CA证书配置Harbor开始启动地址映射访问配置本地登录配置外部虚拟机访问 Harbor镜像中心搭建 Harbor是一个镜像中心&#xff0c;我们所熟知的DockerHub就是一个镜像中心&#xff0c;我们可以把我们打包的镜像放在镜像中心中供…

关于Java

关于Java Java语言关于并发JVM调优工具写在最后 Java语言 Java语言作为当下主流开发语言&#xff0c;其面向对象的开发模式以及一次编译多次运行&#xff0c;跨平台运行以及自动的垃圾回收机制可以说是给开发者节省了很大的时间用于逻辑功能的开发&#xff0c;那么在开发过程中…

【Linux】pycharmgit相关操作

目录 1. git安装配置2. 相关内容3. pycharm连接远程仓库3.1 配置3.2 clone远程仓库3.3 本地仓库上传远程 4. 分支管理4.1 更新代码4.2 新建分支4.3 分支合并4.4 代码比对 5. 版本管理6. 命令行操作6.1 配置git6.2 基础操作6.3 分支操作 1. git安装配置 下载链接&#xff1a;官…

07--Zabbix监控告警

前言&#xff1a;和普米一样运维必会的技能&#xff0c;这里总结一下&#xff0c;适用范围非常广泛&#xff0c;有图形化界面&#xff0c;能帮助运维极快确定问题所在&#xff0c;这里记录下概念和基础操作。 1、zabbix简介 Zabbix是一个基于 Web 界面的企业级开源解决方案&a…

【C++】C++入门的杂碎知识点

思维导图大纲&#xff1a; namespac命名空间 什么是namespace命名空间namespace命名空间有什么用 什么是命名空间 namespace命名空间是一种域&#xff0c;它可以将内部的成员隔绝起来。举个例子&#xff0c;我们都知道有全局变量和局部变量&#xff0c;全局变量存在于全局域…

SQLAlchemy:filter()和filter_by()的微妙差异

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Python编程中&#xff0c;SQLAlchemy是一个强大的ORM&#xff08;对象关系映射&#xff09;工具&#xff0c;它允许使用Python代码来操作数据库。然而&#xff0c;对于新手来说&#xff0c;SQLAlchemy中的一些函数…

mybatis-plus使用拦截器实现sql完整打印

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在使用mybatis-plus&#xff08;mybatis&#xff09;的时候&#xff0c;往往需要…

英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元

【震撼发布】 英伟达最新力作——Nemotron-4 340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】 Nemotron-4 340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行…

Studio One 6.6.2 for Mac怎么激活,有Studio One 6激活码吗?

如果您是一名音乐制作人&#xff0c;您是否曾经为了寻找一个合适的音频工作站而苦恼过&#xff1f;Studio One 6 for Mac是一款非常适合您的MacBook的音频工作站。它可以帮助您轻松地录制、编辑、混音和发布您的音乐作品。 Studio One 6.6.2 for Mac具有直观的界面和强大的功能…