【每日算法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知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~


相关文章
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
AI编程助手对比
AI编程助手对比
|
1月前
|
人工智能 算法 搜索推荐
首个AI编程助手入职科技公司:探索与应用新技术
随着人工智能技术的不断进步和应用,AI编程助手作为其中的一项创新成果,正逐渐走进科技公司的开发环节。就在近日,通义灵码作为首个AI编程助手入职阿里云,为开发人员提供全流程的代码辅助服务。这一新技术的引入引发了广泛关注,这一新技术的引入,既带来了便利和效率的提升,也引发了人们对于人机协作、智能辅助的思考。因为传统的开发模式下,程序员们需要不断投入大量的时间和精力来编写、调试和优化代码,这使得大家在核心业务代码编写方面面临着时间压力,但是随着AI编程助手的加入,情况发生了很大变化。那么本文就来探讨如何看待首个AI编程助手入职科技公司,并分享个人对通义灵码的使用感受。
47 2
首个AI编程助手入职科技公司:探索与应用新技术
|
1月前
|
存储 算法 编译器
米哈游面试算法题:有效的括号
米哈游面试算法题:有效的括号
27 0
|
1月前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
41 1
|
1月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
42 0
|
6天前
|
人工智能 算法
AI面试:线下面试的“隐形门槛”及其影响
随着近几年科技的飞速发展,尤其是技术圈的新技术层出不穷,人工智能已经渗透到我们生活的方方面面,其中也包括求职面试。近两年越来越多的企业采用AI面试系统作为初步筛选求职者的手段,这一现象引起了程序圈广泛讨论,有人认为AI面试是科技进步的体现,有助于提高筛选效率和客观性;也有人认为,这在一定程度上构成了线下面试的“隐形门槛”,给求职者带来了新的挑战。那么本文就来聊聊关于AI面试对应聘者的影响,以及是否有普及的必要性。
24 3
|
14天前
|
存储 缓存 算法
面试遇到算法题:实现LRU缓存
V哥的这个实现的关键在于维护一个双向链表,它可以帮助我们快速地访问、更新和删除最近最少使用的节点,同时使用哈希表来提供快速的查找能力。这样,我们就可以在 O(1) 的时间复杂度内完成所有的缓存操作。哈哈干净利索,回答完毕。
|
19天前
|
人工智能 运维 自然语言处理
对话蚂蚁李建国:当前AI写代码相当于L2.5,实现L3后替代50%人类编程
超70%代码问题,单纯靠基座大模型是解决不了的;未来3-5年,人类50%编程工作可以被替代,有些环节甚至完全自动化。蚂蚁集团代码大模型CodeFuse负责人李建国说道。当下,AI代码生成领域正在野蛮式生长,巨头涌入,AI员工频频上线企业;首个AI程序员Devin被曝造假…… 面对风起云涌的代码生成变革,李建国给出了这样一个明确论断。
35 0
|
26天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
22 0
|
27天前
|
算法 搜索推荐 Python
数据结构与算法在Python面试中的应用实例
【4月更文挑战第13天】本文聚焦Python面试中的数据结构与算法问题,包括排序算法、链表操作和树图遍历。重点讨论了快速排序、链表反转和二叉树前序遍历的实现,并指出理解算法原理、处理边界条件及递归操作是避免错误的关键。通过实例代码和技巧分享,帮助面试者提升面试表现。
13 0