阿里笔试417

有没有老哥交流一下第一题啊,我太菜了,没具体的思路。#阿里笔试2020##阿里巴巴#
全部评论
用分治 1. 将奇数分为右半边,偶数分为左半边,因为 奇数+偶数=奇数 不可能和任意一个2*n相等 2.考虑到奇数侧 有 x = 2n + 1,所以 我们构造一个0~n/2的序列然后将其乘2加1就构造出了左半边 3.偶数侧同理 4. 对于 n <=3的情况直接构造,分别是 int res1[] = {0}, int res2[] = {0,1}, int res3[] = {0,2,1},
2 回复 分享
发布于 2020-04-17 10:23
跟大多老哥一样是双0,这题上来思路是动态规划三个三个向后递归判断交换位置,最后发现条件不足,耽搁大部分时间;后换二分法,以第二个为中心,左右和中间数进行判断,然后没时间了。。。下来马上有了点进展,但是发现不适合大部分情况,n=4正确,然后出错了。但是考完没一会儿来了电话面试,猝不及防,聊完感觉是更凉了。重要的是她说没发现我的成绩!!!!!我能说什么???😑可能我就不配有成绩吧,如实说了有思路但是没实现出来,第一次线上笔试,就遭到了狠狠地毒打,不多说,继续LeetCode吧。😶😶😶
1 回复 分享
发布于 2020-04-17 16:24
麻烦问一下题目? 还有下周笔试的话, 有可能刷到同样的题吗?
点赞 回复 分享
发布于 2020-04-19 06:04
双0啊,第二题应该挺简单的,第一题早知道早点暴力试试了,找了好久规律没思路。。
点赞 回复 分享
发布于 2020-04-17 16:44
from itertools import permutations n = int(input().strip()) l = [] for i in range(1,n+1):     l.append(i) f = list(permutations(l)) count = 0 flag = 0 for x in range(len(f)):     flag = 0     if count == 1:         count = 0         break     arr = f[x]     for  j in range(1,n-1):         if  flag == 1:             break         aj = arr[j]*2         for i in range(j):             if flag ==1:                 break             for k in  range(j+1,n):                 if aj == arr[i]+arr[k]:                     flag = 1                     break         if  j == n-2 and flag==0:             print(' '.join(list(map(str, arr))))             count = 1
点赞 回复 分享
发布于 2020-04-17 13:02
双0。。。哭了,还能有面试吗?
点赞 回复 分享
发布于 2020-04-17 11:07
ac0以后想了分治法然后来不及写了。。。。哭了
点赞 回复 分享
发布于 2020-04-17 10:49
ac0
点赞 回复 分享
发布于 2020-04-17 10:44
我也是ac0.自己测试的几个简单案例都通过了
点赞 回复 分享
发布于 2020-04-17 10:36
题目是啥,来看看
点赞 回复 分享
发布于 2020-04-17 10:25
等待一位大佬前来解答😅
点赞 回复 分享
发布于 2020-04-17 10:15
我的思路是交叉排序,试了几个简单的用例都通过了但是0ac找了二十分钟错,第二题路径都没来得及写
点赞 回复 分享
发布于 2020-04-17 10:12

相关推荐

机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
评论
4
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务