小菜找实习——阿里3月20日笔试第二题
前言:笔者转专业学生在美国读研一,平时学习算法主要是通过leetcode,公开课,google等方式。
这次找实习做国内这些笔试的算法编程题,确实发现和平时写的leetcode不一样。有三点要注意
1.要注意输入输出的格式 国内的编程题是纯白板,之前字节跳动是我的第一场笔试,完全没经验,用了很长时间才弄懂国内的平台是怎么处理输入输出的。所以字节笔试直接凉凉,5道才ac一道。
2.leetcode上很多算法的实现的容器大多都是数组这样的容器,有时候不需要你去考虑怎么存储。但是国内的场景编程算法需要你自己考虑如何存储数据。
3.还是要多练习,多亲自去写code。有时候感觉自己好像懂了,实际上代码写出来还是有bug(其实你只懂了八九成)。
然后阿里第一场笔试的时间点上我正在经历部门的二面,所以就没参加上,打算参加27号那场(时间合适)。看了下第一场的题目,感觉还是有难度的,题目的难度大概在leetcode medium和hard之间。
题意
首先定义上升字符串,s[i]≥s[i−1],比如aaa,abc是,acb不是
给n个上升字符串,选择任意个拼起来,问能拼出来的最长上升字符串长度
样例输入
4
aaa
bcd
bcdef
zzz
样例输出
11
解释:最长字符串是aaabcdefzzz,长度为11
这道题类似leetcode上permutation,subset那种题(DFS深搜+backtrack回溯)实际上最简单的思考也是暴力搜索,考虑的是把每个字符串拼接,存储一个全局变量去保存当前传入字符串的长度最大值。
dfs+backtrack图例
代码如下:
public class Main {/*** 动态保存全部最大值*/private static int maxLength = 0;/*** 旋律,由输入满足每个字符串递增*/private static List<String> melodies;public Main(List<String> melodies){Collections.sort(melodies);this.melodies=melodies;}public static void main(String[]args){Scanner sc = new Scanner(System.in);melodies = new ArrayList<>();int n= sc.nextInt();for(int i=0;i<=4;i++){String input = sc.nextLine();if(input.length()==0){continue;}melodies.add(input);}Main mainSolver = new Main(melodies);helper("",0);System.out.println(maxLength);}/*** * @param s 传入的当前字符串String* @param n 每次搜索开始位置*/private static void helper(String s,int n){if(n>=melodies.size())return ;for(int i=n;i<melodies.size();i++){String current = melodies.get(i);if(s==""||current.charAt(0)>=s.charAt(s.length()-1)) {String temp=s;s += current;maxLength = Math.max(maxLength,s.length());helper(s, i + 1);s = temp;}}}}
一定要注意在每个for循环里的最后要进行回溯!在本题中可以先用一个temp字符串保存,最后再赋值给s。
不懂回溯的同学,或者很久没看回溯的同学建议先复习一下相应知识点。
时间复杂度:2^N 空间复杂度:搜索树的深度
PS:今天在听CS188AI这门课的CSP的时候,发现老师讲到了backtracking!
后记:其实写这篇文章的时候,阿里部门二面过了,现在只剩笔试和总监面HR面。我和二面boss聊的时候还问笔试一道都ac不出来怎么办。boss说哈哈哈那你在之后的面试要解释一下为什么了,总之去写,笔试也只是一个参考而已,不是硬性指标。
anyway,希望笔试顺利!笔试要是不顺利也希望闲鱼网开一面让我过鸭~ 疫情之下的北美学生找实习太不容易了 回国的机票再不订就买不起了咳咳,可是阿里的offer还没拿到呢,又不敢订机票。
笔者水平有限,文章难免有疏忽或者错误,还请读者指正。有什么想法请大家互相交流学习~
小菜找实习——阿里3月20日笔试第二题相关推荐
- pmp 2021年6月20日考试原题分享
题目为原题 答案仅供参考 还是要听培训机构老师的答案. 问题:对于一个新的研发项目,必须估算一些有风险活动的成本.为确保高准确性,项目经理应该使用什么估算技术? A:参数估量 B:类比估量 C:质量成 ...
- 6月20日云栖精选夜读丨国内首家!阿里云宣布全面提供IPv6服务
IPv6作为下一代互联网的技术基础,对物联网.车联网.人工智能等新兴产业的发展有着重大影响.6月20日,中国云计算的领头羊阿里云宣布联合三大运营商全面对外提供IPv6服务,希望能在2025年前帮助中国 ...
- 互联网晚报 | 12月20日 星期一 | 安踏100亿成立“和敏基金会”;阿里公布碳中和目标;京东上线数字藏品交易平台...
今日看点 ✦ 阿里公布碳中和目标:2030年自身运营碳中和,带动生态15年减碳15亿吨 ✦ 华为推出"亚米级"高精度定位服务:助力实现真正车道级导航 ✦ 安踏100亿成立" ...
- 软件随想录(local.joelonsoftware.com/wiki)-2005年06月20日 最佳软件文选I - 介绍 - Introduction to Best Software Writin
2005年06月20日 最佳软件文选I - 介绍 - Introduction to Best Software Writing I 最佳软件文选I - 介绍 From The Joel on Sof ...
- 第四范式AI新品发布会报名开启(8月20日·上海)
8月20日,以"万悟赋能 商业生花"为主题的第四范式AI新品发布会将在上海举办.大会将汇聚各行各业商业领袖,共同探讨企业在不确定性中寻求突破与增长的方式,并分享第四范式在过去一年对 ...
- 小小突击队为什么服务器正在维护中,4399小小突击队3月20日5:30更新维护公告!...
亲爱的各位玩家: <小小突击队>将于3月20日5:30-7:30进行维护更新,更新内容如下: 一.英雄 1.新增:海牙战士为了寻找幼年时走失妹妹,加入了小小突击队 2.调整:龙骑士去国外旅 ...
- 崩坏三8月20号服务器维修,崩坏38月20日版本更新维护通知
亲爱的舰长:为了给舰长更好的游戏体验,休伯利安号将在8月20日进行版本更新维护,维护完成后战舰将更新为4.2版本--「幻夜迷迭」. ======维护时间====== 8月20日07:00~12:00 ...
- 崩坏三8月20号服务器维修,崩坏3手游8月20日更新了什么
崩坏3手游8月20日更新了什么?随着时间的推移4.2版本终于来来临了,这次更新具有很多新的内容,很多的小伙伴不知具有什么好玩的内容,超分手游网整理了相关的内容,想要了解的小伙伴一起来看看吧! 崩坏3手 ...
- 9月20日科技联播:美团今日上市估值超小米京东;阿里巴巴获杭州第一张自动驾驶牌照...
美团今日在港敲钟,估值超小米京东,成中国第四大互联网公司 ,"半个互联网敌人"王兴迎来人生巅峰:阿里宣布将路铺在互联网上,云栖现场获得杭州首张自动驾驶牌照:美图秀秀全面改版进军社交 ...
- 【历史上的今天】8 月 20 日:两位传奇程序员的诞生日!
透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 8 月 20 日,在科技历史上,有两位对着后世软件工程和电子游戏行业影响深远的人诞生,谷歌也在去年发布了 Pixel ...
最新文章
- 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?
- 创业版上市与SAP管理软件系统的关系
- 白盒测试中的六种覆盖方法及案例分析
- 软件测试常见笔试面试题(一)
- 嵌入式电路设计(stm32电路设计)
- Matlab之字符串的查找(findstr)与替换(strrep)
- SpringBoot中如何优雅的使用拦截器
- ActionScript3.0面向对象编程的三个特征的论述?
- pycharm添加python注释头_pycharm使用教程——py文件自动添加文件头注释
- 分类和聚类的区别以及各自常见的算法
- 电子智能化专包有哪些要求和标准
- Tomcat的appBase和docBase解析
- 一个游戏程序员的学习资料(全是好书)
- 互联网巨头入局汽车后市场,VIN码识别迎利好
- 中国建设银行 APP 忘记登录密码,修改重置操作流程
- 互联网的前世今生:Web 1.0、2.0、3.0
- java继承extends
- 挂号信经过几次签收最终送达收件人?
- OKR 结果思维:为什么要以结果为导向?(第一部分)
- 虚拟麦克风音频输入_塑电竞强音 为专业而声 全新职业级罗技G PRO X游戏耳机麦克风震撼上市...