阿里笔试 7/29 9-10点场

  1. 给 n 个恐龙蛋及恐龙蛋的大小,按从大到小排列,第 i 个恐龙蛋每天增大 i,问最少几天会出现两个同样大小的恐龙蛋。
  2. n 个客栈依次排列,给出 n - 1 条路的权重。从任意一处出发,每走过一条路,该路的权重减 1,但得到 1 点利益。不能走权重为 0 的路。求最大利益。

😭 我太菜了

1. 暴力法,每过一天增加恐龙蛋大小,然后判断是否有同样大小的。测试用例能通过 80%。
import itertools

n = int(input())
sizes = list(map(int, input().split()))
sizes.sort(reverse=True)


def judge_equal(sizes):
    hSet = set()
    for s in sizes:
        if s in hSet:
            return True
        hSet.add(s)
    return False


def update_sizes(sizes):
    for i in range(len(sizes)):
        sizes[i] += i + 1


for i in itertools.count(1):
    update_sizes(sizes)
    if judge_equal(sizes):
        print(i)
        break
思路:两个恐龙蛋 i, j (j > i),增长速度可知,初始大小已知,可计算 i,j 在几天后达到同样大小。测试用例仅能通过 10%(还是 20% 忘记了,反正很少)。
欢迎大佬指正:是思路问题还是效率问题?
n = int(input())
sizes = list(map(int, input().split()))
sizes.sort(reverse=True)

min_days = float('inf')

for i in range(len(sizes) - 1):
    for j in range(i + 1, len(sizes)):
        diff = sizes[i] - sizes[j]
        k = j - i
        if diff % k == 0:
            min_days = min(min_days, diff // k)

print(min_days)
2. 回溯,没想到更好的方法。通过率仅 10%。
def try_all():
    n = int(input())
    weights = list(map(int, input().split()))

    MAX = 0

    def dfs(weight, cur, value):
        nonlocal MAX
        MAX = max(MAX, value)
        if cur >= 1 and weight[cur - 1] > 0:  # 向左走
            weight[cur - 1] -= 1
            dfs(weight, cur - 1, value + 1)
            weight[cur - 1] += 1  # 回溯
        if cur < len(weight) and weight[cur] > 0:  # 向右走
            weight[cur] -= 1
            dfs(weight, cur + 1, value + 1)
            weight[cur] += 1  # 回溯

    for i in range(n):
        dfs(weights, i, 0)

    print(MAX)


try_all()



#笔试题目##阿里巴巴#
全部评论
第一题 n = int(input()) values = list(map(int, input().split())) dp = [0 for _ in range(len(values))] for i in range(1, len(values)):     dp[i] = values[i - 1] - values[i] print(min(dp[1:]))
4
送花
回复 分享
发布于 2020-07-29 10:24
第一题 ans = float('inf&(835)#39;) for i in range(1, len(eggs)):     ans = min(eggs[i-1] - eggs[i]) print(ans)
1
送花
回复 分享
发布于 2020-07-29 10:37
秋招专场
校招火热招聘中
官网直投
python感觉有点恶心啊,把c的值赋给b,还会改变b的值,哎
点赞
送花
回复 分享
发布于 2020-07-29 12:12
还会改变c的值
点赞
送花
回复 分享
发布于 2020-07-29 12:12
真的恶心,搞这么花里胡哨的
点赞
送花
回复 分享
发布于 2020-07-29 12:12
让我想我也只能想出回溯法,动态规划没做过这种的。
点赞
送花
回复 分享
发布于 2020-07-29 12:13
第二题动态规划:https://www.nowcoder.com/discuss/462000
点赞
送花
回复 分享
发布于 2020-07-29 12:25
第一题暴力C++可以100%,排序。
点赞
送花
回复 分享
发布于 2020-07-29 12:42
楼主请问一下第二题的数据范围是什么样子的啊
点赞
送花
回复 分享
发布于 2020-07-30 15:41
请问下大家都有后续消息吗,需要多久呢
点赞
送花
回复 分享
发布于 2020-08-02 21:17
你好,我想确认一下,这次阿里的笔试只有两道编程题,没有其他的选择题对吗?
点赞
送花
回复 分享
发布于 2020-08-03 10:21

相关推荐

头像
今天 12:05
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
3 25 评论
分享
牛客网
牛客企业服务