2020.4.17阿里笔试

题目大致如下:
有1-n共n个数,顺序不定,需要你写出一个不含有”顺子“的顺序;
”顺子“定义如下:有任意下标i,j,k,满足i<j<k,且数组a[j]2=a[i]+a[k];
示例:
输入:4
输出:1 3 2 4
(分析:
1+2=2
1.5
1+4=22.5
3+4=2
3.5
均不存在这样的数构成顺子,所以满足

思路如下:
首先,由于 (奇数+偶数)/2 必为小数,可以先把奇数存放在左部,偶数存放在右部,若i属于左部,k属于右部则一定无法构成顺子,接下来考虑左部或右部内取i,j,k得情况

根据以上的思路继续对奇数部分和偶数部分进行相似的划分
对于奇数部分继续划分的两个部分奇左和奇右满足奇左中任意一个数加上奇右中的任意一个数都是4的倍数,也即,他们的和一定是一个偶数的二倍,可以发现这时这样的构造满足了奇数内部无法取出顺子的情(因为全是奇数,所以偶数的二倍必不满足),接下来要做的就是继续处理奇左,奇右内部取完i,j,k的情况。
对于偶数也是同样的情况,构造偶左偶右使得两个集合各取一个元素之和都不是4的倍数,也即都是奇数的二倍。
为了便于理解,取n=16进行说明
A[n]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}(顺序无所谓,暂时全部按照升序)
首先进行奇数偶数的划分
Al[] = {1,3,5,7,9,11,13,15}
Ar[]={2,4,6,8,10,12,14,16}
接着对于left,right分别进行划分
All[]={1,5,9,3}
Alr[]={3,7,11,15}
1 3
5 7
9 11
13 15

Arl[]={2,6,10,14}
Arr[]={4,8,12,16}
2 4
6 8
10 12
14 16

到了这一步已经可以进行初步推测接下来要做的就是继续对All,Alr,Arl,Arr进行划分,
不妨举n=29这样略大的例子,可以右上进行这样的猜测,划分是基于2的幂进行的,最终的终止条件应为左右部分的数的个数均小于三,此时内部不存在这样的i,j,k,且各个部分之间都不满足。以n=29为例
第一次:
1,3,5,7,,,29
2,4,6,8,,,28

第二次:
1,5,9,,,29
3,7,11,,,27
2,6,,,26,
4,8,,,28,

第三次
1,9,17,25
5,13,21,29
3,11,19,27
7,15,23
2,10,18,26
6,14,22
4,12,20,28
8,16,24

第四次
1,17
9,25
5,21
13,29
3,19,
11,27

终止

可以得出结论对于n需要划分[logn]次,且数的间隔为pow(2,[logn]),每个内部之间顺序无所谓,只需要将各个部分连接即为所需的答案。

正确与否欢迎指正,代码以及更详细的过程有时间附上
很遗憾笔试的时候准备不足没有做完,只是有划分的思路但并不清晰,凉凉凉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值