百度算法岗笔试-0329

投的是2022的暑期实习 计算机视觉算法研发工程师实习生
笔试编程两道题 全部AC
第一题:最长回文串01(leetcode : 5类似)
解题思路:中心扩展法求解最长回文串,分别以一个字符为中心和两个字符为中心,然后选择其中最长的那个
注意的点:这个题如果是 11111 or 000 返回0 所以有一个判断需要判断是否全为一样的值
代码:
#include <bits/stdc++.h>
using namespace std;
/*
1、回文串 判断
2、最长子串
3、双指针 中心扩展法 
找回文串的难点在于,回文串的的长度可能是奇数也可能是偶数,
解决该问题的核心是从中心向两端扩散的双指针技巧。
*/


// 在 s 中寻找以 s[l] 和 s[r] 为中心的最长回文串
string palindrome(string &s, int l, int r) {
    // 防止索引越界 并且还要是回文  
    while (l >= 0 && r < s.length() && s[l] == s[r]) {
        // 双指针,向两边展开  
        l--; r++;
    }
    // 返回以 s[l] 和 s[r] 为中心的最长回文串
    // 这里要注意 l和r都是越界了的才会跳出while 所以 要把 l拉回界内 然后返回 r-l长度的子串 
    return s.substr(l+1, r-1-l);
    }

string longestPalindrome(string s) {
    string res = "";
    for (int i = 0; i < s.length(); i++) {
        // 以 s[i] 为中心的最长回文子串
        string s1 = palindrome(s, i, i);
        // 以 s[i] 和 s[i+1] 为中心的最长回文子串
        string s2 = palindrome(s, i, i + 1);
        // res = longest(res, s1, s2)
        res = res.length() > s1.length() ? res : s1;
        res = res.length() > s2.length() ? res : s2;
    }
    return res;
}
int main(){
	string s;
	string ans;
	cin>>s; //输入一个 字符串s
	map<char,int> mp; // 统计01出现的个数
	int len = s.size();
	for(int i=0; i<len; i++){
		mp[s[i]]++;
	}
    // 如果0/1出现的次数和字符串长度一样那就输出0 返回
	if(mp[s[0]]==len){
		cout<<0;
		return 0;
	}
	ans = longestPalindrome(s);
	cout<<ans<<endl;
	
	return 0;
} 
第二题:礼物组合 (原题原题原题 去年百度就考了)
礼物分为a,b两个品种。组合的方式包括两种,一种是组合里有x件a类礼物加y件b类礼物,一种是组合里有x件b类礼物加y件a类礼物。求组合数最多
输入abxy 分别表示a的数量b的数量x和y的值
解题思路:贪心 大的-大的 小的-小的 直到a或b的数量为0
#include <bits/stdc++.h>
using namespace std;

int main(){
 
    int a, b, x, y;
    cin >> a >> b >> x >> y;
 
	long long int ans=0;
	// 大-大 小-小 
	
	while(a && b){
		// a始终是大的 
		if(a<b){
			int temp = a;
			a = b;
			b = temp;
		}
		// x始终是大的 
		if(x<y){
			int temp = x;
			x = y;
			y = temp;
		}
		
		a = a-x;
		b = b-y;
		
		ans++; 
		
		 
	} 
	cout<<ans;
 
 
    return 0;
}


   

#百度笔试##实习##笔试题目#
全部评论
t2贴一个O(logn)解法: 显然,最大值为(a + b) // (x + y),下面对0到(a + b) // (x + y)二分check最大值max是否可以由max得到答案。 首先特判x=y的情况,max为min(a, b) // x。 设二分过程中的值为m,则可以由m得到答案(*)等价于存在m1使得m1*x+(m-m1)*y<=a 且 m1*y+(m-m1)*x<=b,分x>y和x<y讨论,解上面两个不等式得到m1的上界right和下界left,对right向下取整,对left向上取整,则(*)等价于left<=right 且left<=m且right>=0。 import math a, b, x, y = map(int,input().split(' &(5528)#39;)) if x == y:     print(min(a, b) // x) else:     l, r = 0, (a + b) // (x + y)     while  l <= r:         mid = (l + r ) // 2         if x > y:             left, right = (b - mid * x)/(y - x), (a - mid * y)/(x - y)         else:             right, left = (b - mid * x)/(y - x), (a - mid * y)/(x - y)         right, left = math.floor(right), math.ceil(left)         if left <= right and mid >= left and 0 <= right:             l = mid + 1         else:             r = mid - 1     print(r)
1 回复 分享
发布于 2022-03-29 22:35
百度编程题相对还简单一些
1 回复 分享
发布于 2022-03-29 21:09
老哥,方便透露一下算法岗笔试有什么题吗?需要怎么准备吗?
点赞 回复 分享
发布于 2022-04-09 20:38
贴一个自己的解法 nums = [int(i) for i in input().split()]         a = nums[0]         b = nums[1]         x = nums[2]         y = nums[3]         count = 0         while a >= 0 and b >= 0:             if a >= b:                 a, b = b, a              if x >= y:                 x, y = y, x              if b >= y and a >= x:                 b -= y                 a -= x                 count += 1             else:                 break         print(count)
点赞 回复 分享
发布于 2022-03-29 23:05
这数据也太弱了,t1 O(n^3)能过, t2 O(n)能过
点赞 回复 分享
发布于 2022-03-29 22:26
只A了第一道,第二道dp了半天过了9%😪
点赞 回复 分享
发布于 2022-03-29 21:39
第二题10**9能过?
点赞 回复 分享
发布于 2022-03-29 21:19
编程AC了,选择直接炸裂
点赞 回复 分享
发布于 2022-03-29 21:15
py超时了。好难过😓
点赞 回复 分享
发布于 2022-03-29 21:14
可是选择题也太难了……
点赞 回复 分享
发布于 2022-03-29 21:09
第二题可否当做线性规划整数解问题来做
点赞 回复 分享
发布于 2022-03-29 21:09
太强了,呜呜呜
点赞 回复 分享
发布于 2022-03-29 21:08

相关推荐

05-28 22:52
已编辑
北京理工大学 C++
京东零售-产研timeline:0515&nbsp;一面0521&nbsp;约二面0526&nbsp;二面0527&nbsp;约三面0528&nbsp;三面,下午oc##一面:50min1.&nbsp;简单介绍一下项目2.&nbsp;zookeeper是做什么用的&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;为什么用zookeeper,还了解哪些其他的3.&nbsp;为什么用protobuf而不是其他协议&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;跟其他协议比有什么优势&nbsp;&nbsp;&nbsp;&nbsp;b.&nbsp;为什么速度快体积小4.&nbsp;怎么解决tcp粘包拆包问题的5.&nbsp;遇到过什么困难,怎么解决的6.&nbsp;硕士学过什么课程&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;一般怎么自学的&nbsp;&nbsp;&nbsp;&nbsp;b.&nbsp;有没有关注什么技术网站’7.&nbsp;网络是怎么通信的8.&nbsp;tcp建立连接过程&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;为什么要三次不能两次9.&nbsp;一个存了40亿个字的文件,在一个内存(2GB)很小的旧电脑里,怎么查找里面有没有没出现某个数?可以用什么数据结构?怎么设计算法?&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;不知道,提示下说了与或,说了哈希set但很暴力,面后查了一下:用位图(BitSet),原理:用一个足够大的&nbsp;bit&nbsp;数组(每一位表示一个整数是否出现过)10.&nbsp;MySQL索引结构是什么11.&nbsp;唯一索引和主键索引区别?12.&nbsp;联合索引(a,b)能不能查b?13.&nbsp;了解哪些设计模式?单例模式的使用场景?14.&nbsp;本科学过什么为什么换专业15.&nbsp;为什么想做后端16.&nbsp;能不能转java17.&nbsp;C++是怎么学习的18.&nbsp;还面了什么公司反问:1.&nbsp;业务做什么的、技术栈2.&nbsp;对实习生有什么要求?3.&nbsp;怎么去提高那些方面?前情:前一天半夜刚做完测评,于当日下午突然接到电话,说下周一有没有时间聊一下,说了两个时间都刚好跟别的撞了,遂约在当晚八点半。太突然了鼠鼠突然迎来人生处女面,很多东西都没有准备好🥹不过面试官人真超好一直笑呵呵的很亲和,鼠鼠太菜了全程很多题没答上来但氛围都没有尴尬。##二面:30min1.&nbsp;可以实习多久2.&nbsp;为什么想做这个方向3.&nbsp;专业问题,未来规划问题4.&nbsp;举一个体现学习能力的例子5.&nbsp;遇到了什么难点,怎么克服的6.&nbsp;具体是怎么去学习的7.&nbsp;手撕一个最长回文子串,共享屏幕,限时5min8.&nbsp;写一个sql题:表示不会写9.&nbsp;反问:实习生工作、对实习生的期待、流程要多久##三面:40min就是常规问题,能实习多久、毕业压力大不大、学校做的研究课题和创新点、遇到的困难怎么解决的、最有成就感的事情、讲一个学生工作经历、为什么转专业、未来规划之类的。反问:部门业务、实习生业务、实习生人数、转正率、是否要转java和会不会有要求、工作氛围和工作时长等。
点赞 评论 收藏
分享
评论
5
21
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务