携程 算法岗 笔试 记录贴

8.30 笔试 10到单选题,4道编程题
1. 对输入的每个数字变换为偶数,如果不能输出-1,多解输出任意一个即可(注意数的第一位不能为0)ac
n = int(input())
for i in range(n):
    num = input()
    result = ''
    tag = 0
    if int(num[-1]) % 2 == 0:
        print(num)
    elif int(num[0]) % 2 == 0:
        for j in range(1,len(num)):
            if int(num[j]) != 0:
                result += num[j:]
                result += num[:j]
                break
        print(result)
    else:
        for j in range(len(num)):
            if int(num[j]) % 2 == 0:
                tag =1
                tmp = num[j]
                result += num[j+1:]
                result += num[j]
                print(result)
                break
            else:
                result += num[j]
        if tag == 0:
            print(-1)
2. 有a个‘y’,b个‘o’,c个‘u’组成字符串,连续的‘you’得2分,连续‘oo’得1分,输出最大得分 ac
n = int(input())
for i in range(n):
    a,b,c = map(int,input().strip().split())
    min_num = min(a,b,c)
    if b > min_num:
        result = 2 * min_num + (b-min(a,b,c) - 1)
    else:
        result = 2 * min_num
    print(result)
3.游游的三色树。
没思路,输出1过了6%。想讨论一下


4. 一个数组,定义滑动窗口值为数组中相邻两个数之差的最大值,可以修改数组的一个数或者不修改,求最小滑动窗口值。只ac了94% 不知道哪种情况没考虑到
import math
n = int(input())
nums = list(map(int,input().strip().split()))
nums_diff = []
for i in range(1,len(nums)):
    nums_diff.append(nums[i] - nums[i-1])
max_diff = max(nums_diff)
min_diff = min(nums_diff)
tag = 0
for i in range(len(nums_diff)):
    if nums_diff[0] == max_diff:
        tag += 1
        nums_diff[0] = 0
    elif nums_diff[-1] == max_diff:
        nums_diff[-1] = 0
        tag += 1
    if nums_diff[i] == max_diff:
        tag += 1
        if nums_diff[i-1] < nums_diff[i+1]:
            nums_diff[i] = math.ceil((nums_diff[i] + nums_diff[i-1]) / 2) 
        else:
            nums_diff[i] = math.ceil((nums_diff[i] + nums_diff[i+1]) / 2) 
if tag == 1:
    print(max(nums_diff))
else:
    print(max_diff)



#我的秋招日记##携程##笔试#
全部评论
三色树这样可以吗:计算当前节点为根的子树的所有颜色之和,然后深度遍历,如果(1-cur)满足,cur也满足,那就res+1。但我最后没找到bug,所以0%了
1 回复 分享
发布于 2022-08-30 21:17 北京
救命,数分岗题型一样,编程题只有一题跟算法岗不一样
1 回复 分享
发布于 2022-08-30 21:25 浙江
楼主已经收到offer或者意向了吗??
1 回复 分享
发布于 2022-09-18 09:48 上海
我记得第四题题目是两个相邻的数的差的绝对值吧
点赞 回复 分享
发布于 2022-08-30 21:12 北京
我跟老哥你的情况基本一摸一样啊🤣
点赞 回复 分享
发布于 2022-08-30 21:12 重庆
蹲一个算法岗面试的
点赞 回复 分享
发布于 2022-09-18 15:27 上海

相关推荐

03-15 20:26
已编辑
电子科技大学 C++
T3题面:给一个3e5数组,每次询问长度为len的子数组乘积的和,如果子数组乘积&gt;1e9,则视为0.赛后一分钟想出来了,比赛时打了个暴力+线段树注意到1e9大约是2^30,&nbsp;因此len长度如果&gt;30就直接输出0,30以内做一个记忆化就行,复杂度O(30*n)感觉是以前比赛做过的题,忘了怎么做了。。。---upd:&nbsp;忘了数据范围了,如果有0,1的话那这样也不行
blueswiller:给出一个做法,刚刚才想到,应该没问题,时间复杂度为 O(max(30n, nlogn)): 1. 根据 0 切分数组。2. 现在问题转化为>=1 的情况,我们首先维护每一个数前一个 > 1 的数的位置,同时维护一个长度的差分数组,初始值全为 0。3. 我们从每一个数 i 开始向前跳,至多跳 30 次,维护这个过程中的乘积,于是得到 30 个区间加和。举例:假设从 j1 跳到 j2 ,相当于对查询长度 (i- j1 + 1) 至 (i - j2) 贡献 a_i * ... * a_j1。4. 对于所有区间加和,我们采用差分数组结合树状数组对其进行维护,由于长度至多为 n ,树状数组构建的复杂度为 O(nlogn),于是,构建阶段的复杂度为 O(max(30n, nlogn))。在线单次查询的复杂度为树状数组查询的复杂度 O(logn)。
投递淘天集团等公司10个岗位 > 笔试
点赞 评论 收藏
分享
评论
1
11
分享

创作者周榜

更多
牛客网
牛客企业服务