笔试 9.22
20道选择题,共40分;3道编程题,共60分。
选择题
- Android中给View添加点击事件的方法
- URL为
http://xxx.com/user/login.do
,是什么方法的请求? - 哪些情况会造成ANR
- 不用四大组件中哪个不用Intent启动
- SharedPreferences的文件存储路径,SharedPreferences数据读写方法过程
- 银行家算法,判断哪个顺序不会死锁
- 合法的出栈顺序
- 给出排序的中间状态,判断是哪种排序,归并
- TCP、UDP的特点与区别
编程题
偏难。
第一题:给定一个整数数组和一个整数x,将数组分成连续的任意份,要满足每份的乘积都不能是x的倍数,且数组中每个元素都不是x的倍数。问最少需要分多少份?
有思路,但不知为何只对了18%,小红书的判题器不会给出没通过的测试数据。
分的要尽可能少,则每一份要尽可能大。由于是连续的,可以从头开始看。当乘积变成x的倍数后,无论之后再乘上什么数都仍是x的倍数,因此当乘积变成倍数时就要分了。
定义一个curr记录乘积,初始值为数组第一个元素,从第二个元素开始遍历数组。若乘积对x求模不为0,则curr = curr * a[i]
;否则,将结果count加一,同时curr = a[i]
。遍历结束后,最后一组还要再count加一,输出count。
第二题:给定收藏夹数n和整数x,接下来n行给出每个收藏夹内所有文章的标签,每个收藏夹内标签的数量可能不同,标签可能重复。现在要找出两个收藏夹,满足二者标签种类刚好为x。有满足则输出YES和收藏夹编号,无满足则输出NO。
有思路,但只对了83%。
定义一个vector<vector<string>>
用于存储所有收藏夹及其内部的标签。双重循环遍历0 <= i < n - 1)
与i + 1 <= j < n
,每次循环定义一个集合用于标签去重,将两收藏夹的标签全部加入集合,判断集合大小是否等于x。
第三题:给出n条直线,接下来n行,每行给出直线斜率k和截距b,k不为0。问x>0的交点有几个?
没时间写了。