【每日算法Day 100】字节跳动 AI Lab 面试编程题(三道)

简介: 我当时太紧张了,真是脑抽了,还想着弄个优先队列,划分最大的,然后丢进去,再划分最大的,但是是错的。正确解法小姐姐走了我才想起来,二分答案 m ,然后扫描一遍判断将每一段划分成小于等于 m 的一共需要多少次。如果次数大于 k ,说明 m 太短了,否则说明 m 太长了。

第一题


给出一条长度为 L 的线段,除了头和尾两个点以外,上面还有 n 个整数点,需要在上面再放 k 个新的点,使得相邻的两个点之间的最大距离最小,求这个最小的距离。

题解


我当时太紧张了,真是脑抽了,还想着弄个优先队列,划分最大的,然后丢进去,再划分最大的,但是是错的。

正确解法小姐姐走了我才想起来,二分答案 m ,然后扫描一遍判断将每一段划分成小于等于 m 的一共需要多少次。如果次数大于 k ,说明 m 太短了,否则说明 m 太长了。

代码

#include <bits/stdc++.h>using namespace std;intmain() {   
intL, n, k;   
scanf("%d%d%d", &L, &n, &k); 
vector<int>a(n+2, 0);   
a[0] =1;   
for (inti=1; i<=n; ++i) { 
scanf("%d", &a[i]);  
    }    a[n+1] =L;    intl=1, r=L-1;
while (l<r) {      
intm=l+ (r-l) /2;   
intcnt=0;   
for (inti=1; i<=n+1; ++i) {   
cnt+= (a[i] -a[i-1] -1) /m;    
        }      
if (cnt>k) l=m+1;    
elser=m;    }  
cout<<l<<endl;    
return0;}

第二题


给出一个数组 A,找到最大的 A[i] - A[j],要求 i > j

题解


这题很简单,直接遍历每个 A[i],维护它前面最小的那个数 minn,然后求出最大的 A[i] - minn 就行了。

代码

#include <bits/stdc++.h>using namespace std;intmain() {   
intn;   
scanf("%d", &n);  
vector<int>a(n, 0);  
for (inti=0; i<n; ++i) {     
scanf("%d", &a[i]);    }   
intminn=a[0], res=INT_MIN;   
for (inti=1; i<n; ++i) {     
res=max(res, a[i]-minn);   
minn=min(minn, a[i]);    }  
cout<<res<<endl;}

第三题


给定一个字符串,对该字符串进行删除操作,保留 k 个字符且相对位置不变,使字典序最小。

题解


这题也脑抽了,想了一堆方法,dp 复杂度太高,线段树太麻烦,最后用 map 勉强写了一下。

主要思想是这样的,最后要保留 k 个字符,那么第一个字符只能在下标 0 ~ n-k 中寻找,那肯定找最小的啊,如果有多个就找最前面那个,把它的位置记为 pos

然后第二个字符肯定得在下标 pos ~ n-k+1 中寻找,还是一样的思路,找到以后更新 pos 位置,依次找下去找到 k 个为止。

所以我就利用了 map 的特性,把寻找窗口内的字符个数做一下统计,然后取出 map 中的第一个字符就是字典序最小的了,次数减一,如果减到 0 了就删除掉。

然后从 pos 位置开始遍历,直到第一个等于你刚刚取出的字符为止,更新 pos 位置。

image.png

最优解:

最优解当时没想出来,是用单调栈。维护一个递增的单调栈,我们的目标是保留 k 个字符,也就是删除 n-k 个字符。

那么如果栈顶元素大于当前遍历元素,并且还没删够 n-k 个,就出栈,当作删除了一个元素。否则的话如果删够了,不管大小关系统统入栈,因为你没法删了。

最后全遍历完了,如果还没删够,那就继续出栈,直到删够为止。最后把栈里的字符拼接成一个字符串就是答案了。

时间复杂度是 image.png的。

代码


#include <bits/stdc++.h>using namespace std;stringf(strings, intk) {   
intn=s.size();  
map<char, int>mp;   
for (inti=0; i<=n-k; ++i) {  
mp[s[i]]++;    
    }    stringres="";   
intpos=0;   
for (inti=k; i>=1; --i) {    
charc=mp.begin()->first;
res+=c;       
for (intj=pos; j<=n-i; ++j) {    
mp[s[j]]--;         
if (!mp[s[j]]) mp.erase(s[j]);      
if (s[j] ==c)                                   
break;    
mp[s[n-i+1]]++; 
    }    returnres;}
intmain() {  
strings;  
intk;    
cin>>s>>k; 
cout<<f(s, k) <<endl;}

最优解:

#include <bits/stdc++.h>using namespace std;stringf(strings, intk) {    intn=s.size();   
k=n-k;    stack<char>st;  
for (inti=0; i<n; ++i) {        
while (!st.empty() &&st.top() >s[i] 
&&k) {    
st.pop();  
k--;  
                               }        st.push(s[i]);    }    
stringres="";    while (!st.empty()
                                                     ) 
                           {        
if (k) k--;  
elseres+=st.top();             
st.pop();    }  
reverse(res.begin(), res.end()
                                  ); 
returnres;}
intmain() {   
strings; 
intk;    
cin>>s>>k;
cout<<f(s, k) <<endl;
}

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
7月前
|
人工智能 算法 搜索推荐
电商API的“AI革命”:全球万亿市场如何被算法重新定义?
AI+电商API正引领智能商业变革,通过智能推荐、动态定价与自动化运营三大核心场景,大幅提升转化率、利润率与用户体验。2025年,75%电商API将具备个性化能力,90%业务实现智能决策,AI与API的深度融合将成为未来电商竞争的关键基石。
|
10月前
|
人工智能 算法 数据可视化
机器人训练师狂喜!Infinite Mobility:上海AI Lab造物神器1秒生成可动家具,成本只要1分钱
上海AI Lab推出的Infinite Mobility采用程序化生成技术,可高效生成22类高质量可交互物体,单个生成仅需1秒且成本低至0.01元,已应用于机器人仿真训练等领域。
417 2
机器人训练师狂喜!Infinite Mobility:上海AI Lab造物神器1秒生成可动家具,成本只要1分钱
|
10月前
|
人工智能 算法 API
多模态模型卷王诞生!InternVL3:上海AI Lab开源78B多模态大模型,支持图文视频全解析!
上海人工智能实验室开源的InternVL3系列多模态大语言模型,通过原生多模态预训练方法实现文本、图像、视频的统一处理,支持从1B到78B共7种参数规模。
1468 6
多模态模型卷王诞生!InternVL3:上海AI Lab开源78B多模态大模型,支持图文视频全解析!
|
10月前
|
人工智能 编解码 物联网
设计师集体破防!UNO:字节跳动创新AI图像生成框架,多个参考主体同框生成,位置/材质/光影完美对齐
UNO是字节跳动开发的AI图像生成框架,通过渐进式跨模态对齐和通用旋转位置嵌入技术,解决了多主体场景下的生成一致性问题。该框架支持单主体特征保持与多主体组合生成,在虚拟试穿、产品设计等领域展现强大泛化能力。
655 4
设计师集体破防!UNO:字节跳动创新AI图像生成框架,多个参考主体同框生成,位置/材质/光影完美对齐
|
10月前
|
人工智能 自然语言处理 算法
阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
本文介绍了阿里云 AI 搜索开放平台的技术的特点及其在各行业的应用。
1011 3
|
5月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
10月前
|
人工智能 编解码 自然语言处理
DreamActor-M1:字节跳动推出AI动画黑科技,静态照片秒变生动视频
DreamActor-M1是字节跳动研发的AI图像动画框架,通过混合引导机制实现高保真人物动画生成,支持多语言语音驱动和形状自适应功能。
875 40
DreamActor-M1:字节跳动推出AI动画黑科技,静态照片秒变生动视频
|
10月前
|
机器学习/深度学习 人工智能 JSON
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
1314 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
|
11月前
|
人工智能 机器人 物联网
SpatialVLA:上海AI Lab联合上科大推出的空间具身通用操作模型
SpatialVLA 是由上海 AI Lab、中国电信人工智能研究院和上海科技大学等机构共同推出的新型空间具身通用操作模型,基于百万真实数据预训练,赋予机器人强大的3D空间理解能力,支持跨平台泛化控制。
378 7
SpatialVLA:上海AI Lab联合上科大推出的空间具身通用操作模型