【每日算法Day 101】字节跳动 AI Lab 精选面试编程题

简介: 字节跳动 AI Lab 精选面试编程题

0-1 背包问题(浮点数)


0-1 背包问题,一共 n < 20 个物品,每个物品价格 p[i] (浮点数),重量 w[i] (浮点数),背包容量 M (浮点数)。求最大能装的价值是多少?

输入:20 678.9123.56 51.5631.45 23.5662.54 45.6215.32 42.2312.32 65.3265.12 32.4515.65 45.7862.15 98.3232.15 45.6215.44 95.3245.65 99.4532.15 22.4823.56 51.5631.45 23.5662.54 45.6215.32 42.2312.32 65.3265.12 32.4515.65 45.7862.15 98.32输出:1050.07

题解


因为这里全部都是浮点数,所以没有办法直接用普通的动态规划来做,这里我提供几个思路。

方法1:

如果小数点只有两位的话,很简单,所有数字统一乘以 100 ,那么就都变成整数了。然后就可以直接用普通的 0-1 背包方法来做。


image.png

代码



#include <bits/stdc++.h>using namespace std;typedeflonglongll;constintmod=1e9+7;constintN=22;
structnode {    doublew, p;  
booloperator< (constnode&rhs) const {  
returnw<rhs.w;  
             }} a[1<<N], b[1<<N];
intmain() { 
intn;    doubleM;
scanf("%d%lf", &n, &M);  
printf("%f\n", M);  
vector<double>w(n, 0), p(n, 0);  
for (inti=0; i<n; ++i) {  
scanf("%lf%lf", &w[i], &p[i]); 
    }    printf("%f\n", tmp); 
intca=0, cb=0;   
for (ints=0; s< (1<<(n/2)); ++s) {  
doubletot_w=0, tot_p=0; 
for (inti=0; i<n/2; ++i) {   
if (s&(1<<i)) {     
tot_w+=w[i]; 
tot_p+=p[i];    
if (tot_w>M) break;  
            }     
        }       
if (tot_w<=M) {   
a[ca].w=tot_w;   
a[ca].p=tot_p; 
ca++;     
        }   
    }  
for (ints=0; s< (1<<(n-n/2)); ++s) { 
doubletot_w=0, tot_p=0; 
for (inti=0; i<n-n/2; ++i) {  
if (s&(1<<i)) {    
tot_w+=w[n/2+i];
tot_p+=p[n/2+i]; 
if (tot_w>M) break;
            }      
        }      
if (tot_w<=M) {    
b[cb].w=tot_w;   
b[cb].p=tot_p;    
cb++;      
        }   
    }    
sort(a, a+ca); 
sort(b, b+cb);   
vector<double>maxp(cb, 0); 
maxp[0] =b[0].p; 
for (inti=1; i<cb; ++i) { 
maxp[i] =max(maxp[i-1], b[i].p);
    }   
intj=cb-1;   
doubleres=0; 
for (inti=0; i<ca; ++i) { 
while (j>=0&&a[i].w+b[j].w>M) --j;
if (j<0) break; 
res=max(res, a[i].p+maxp[j]);  
    }  
printf("%f\n", res);  
return0;
}

最小长度子数组


给一个正数数组,找出最小长度连续子数组,其和大于等于 m

题解



image.png

代码



#include <bits/stdc++.h>using namespace std;intmain() { 
intn, m;   
scanf("%d%d", &n, &m);
vector<int>a(n, 0);  
for (inti=0; i<n; ++i) {   
scanf("%d", &a[i]);   
    }    intj=0, sum=0, res=INT_MAX;
for (inti=0; i<n; ++i) {   
sum+=a[i];     
while (sum>=m) {   
res=min(res, i-j+1); 
sum-=a[j++];     
        }   
    }   
printf("%d\n", res); 
return0;
}

image.png

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


相关文章
|
11月前
|
存储 人工智能 JSON
揭秘 Claude Code:AI 编程入门、原理和实现,以及免费替代 iFlow CLI
本文面向对 AI Coding 感兴趣的朋友介绍 Claude Code。通过此次分享,可以让没有体验过的快速体验,体验过的稍微理解其原理,以便后续更好地使用。
3744 18
揭秘 Claude Code:AI 编程入门、原理和实现,以及免费替代 iFlow CLI
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
350 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
744 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
651 4
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
277 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
11月前
|
人工智能 JSON 安全
Claude Code插件系统:重塑AI辅助编程的工作流
Anthropic为Claude Code推出插件系统与市场,支持斜杠命令、子代理、MCP服务器等功能模块,实现工作流自动化与团队协作标准化。开发者可封装常用工具或知识为插件,一键共享复用,构建个性化AI编程环境,推动AI助手从工具迈向生态化平台。
2332 1
|
11月前
|
机器学习/深度学习 人工智能 JSON
AI编程时代,对应的软件需求文档(SRS、SRD、PRD)要怎么写
对于AI编程来说,需要使用全新的面向提示词的需求文档来和AI+人类沟通,构建共同的单一事实来源文档知识库是重中之重。
1721 7
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
只需要把项目导入 Qoder,Repo Wiki 就可以详细地帮你梳理整个代码工程,甚至可以将项目的隐性知识显性化。这简直就是程序员的福音。