携程9.5笔试

人生第二次ak 4/4 战斗爽!!!
1. 签到题 1-n排列 令最长上升连续序列长度为k 并且字典序最小 直接前k个1到k 剩下的倒序
2. 01字符串变换,每次可以从开头到i处取反 例如11001(i=4) -> 00111 变换n次变成全1 n就是这个字符串的权值 求字符串奇数长度的连续子串的权值是奇数的子串个数
其实很简单 0开头的字符串 权值一定是奇数 直接遍历一次统计一下每个0开头有多少个奇数长度的子串就行了
3. 用0-n组成一个m位数 能组成多少个大于k的数
暴力回溯 注意0不能开头
4. 一个数组 每次可以把其中一个数-1 最少多少次 可以让数组中每个长度为k的连续子数组的和 都小于sum
滑动窗口+贪心,从前往后滑,如果超过sum就贪心的从窗口最右边开始改
注意数据规模,似乎sum和数组中的数都要用long 不然只有25%
全部评论
恍然大悟,第二题相邻位置的翻转次数相差0或者2,如果当前位置是0,则翻转次数就➕2,是1,则和前面位置翻转次数保持不变,所以开头是0,就是从1开始累加 后面不管有没有0,权值为奇数。我写的时候都打印出来每个位置的翻转次数 没想到这一点
2 回复 分享
发布于 09-05 21:30 四川
第三题真能回溯啊,我还以为要超时哈哈
1 回复 分享
发布于 09-05 21:10 北京
我c,我用的int,是说这么一直a不了
点赞 回复 分享
发布于 09-05 21:10 浙江
不会,我就用了Long,还是25%
点赞 回复 分享
发布于 09-05 21:12 江苏
0开头的字符串权值为啥一定为奇数?000不是一次翻转就够了?
点赞 回复 分享
发布于 09-05 21:18 四川
你的思路太好了,学不来
点赞 回复 分享
发布于 09-05 21:35 福建
哎第二题我只想到了连续0或者连续1算一段,除非最后一段是1否则有几段就是几次,没看出来0开头一定是奇数
点赞 回复 分享
发布于 09-05 21:54 山东
我好像只对sum用了long 最后过50
点赞 回复 分享
发布于 09-05 23:52 江西
过了吗
点赞 回复 分享
发布于 09-08 22:35 上海

相关推荐

刚刚笔试4道题只过了两道半,感觉悬了,第二题dp死活只有50%准确率,用dfs又超时了,当时一紧张完全忘了还能加memoization,唉,就是下面这道题,第二题挣扎了1个多小时导致第四题一点没碰,最后交卷前看了一眼好像不太难,亏死了你来到了一个迷宫,迷宫共有 n 关,每关有左侧和右侧两个宝箱,左侧宝箱的收益为 a_i,右侧宝箱的收益为 c_i。在每次只可以选择一个宝箱,然后到达下一关。当你在选择宝箱时,如果和上一关选择宝箱的方位相同则无损失。如果上一关选择了左侧宝箱,而这一关想要切换到右侧宝箱,那么需要支付 b_i 代价;如果上一关选择了右侧宝箱,而这一关想要切换到左侧宝箱,那么需要支付 d_i 代价(必须在进入下一关之前切换)。有些宝箱的收益和切换代价可能是负数!可以理解为,代价为负值相当于收益。你想知道,当通过 n 关后,总收益的最大值是多少?输入描述:本题为多组测试数据,第一行输入一个正整数 T(1 ≤ T ≤ 100),代表测试数据组数。对于每组测试数据,第一行输入一个正整数 n(1 ≤ n ≤ 1000),代表关卡数量。接下来有 n 行,每行四个整数 a_i, b_i, c_i, d_i(-100 ≤ a_i, b_i, c_i, d_i ≤ 100),具体代表题意中所述的数值。这道题dp怎么做,java输出描述:对于每组测试数据,输出一个整数,代表从小红总收益的最大值。
投递携程等公司10个岗位
点赞 评论 收藏
分享
15 15 评论
分享
牛客网
牛客企业服务