漂亮数组解法
Posted yyywh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漂亮数组解法相关的知识,希望对你有一定的参考价值。
漂亮数组:给定一个长度为N的数组arr,该数组由1到N的整数来组成,且满足arr[k]*2不等于arr[i]+arr[j] (i<k<j)
例如:
长度为4的数组:2,1,4,3
长度为8的数组:[1,5,3,7,2,6,4,8]
假设一个数组为漂亮数组,则该数组一定满足下列条件:
(1)数组中的每一个数加上一个任意整数,依旧维持漂亮数组。
例如:将2,1,4,3全部加一
得到 3,2,5,4 依旧满足
(2)将数组中的每一个数都乘上一个非0整数,依旧满足
例如:将2,1,4,3都乘2
得到4,2,8,6
(3)最重要的一条来了,将一个全是奇数的漂亮数组和一个全是偶数的漂亮数组合并在一起,依旧是一个漂亮数组。
例如:将2,1,4,3都乘2
得到偶数漂亮数组4,2,8,6
再将这个偶数数组全部-1,得到奇数数组3,1,7,5
将这两个数组合并,得到3,1,7,5,4,2,8,6依然满足规则。
所以可以通过这个规则,获得长度为4,8,16,32....的漂亮数组
(4)最后一个规则,就是漂亮数组中删去一个数,依旧能保持漂亮数组
代码如下:
class Solution
public int[] beautifulArray(int N)
int array[] = new int[2000];
int array2[] = new int[N];
int k =0;
array[0] = 2;
array[1] = 1;
array[2] = 4;
array[3] = 3;
for(int i = 1;i<200;i*=2)
for(int j = 0;j<i*4;j++)
array[i*4+j] = array[j]*2;
array[j] = array[j]*2-1;
for(int i = 0;i<2000;i++)
if(k<N&&array[i]!=0&&array[i]<=N)
array2[k] = array[i];
k++;
return array2;
以上是关于漂亮数组解法的主要内容,如果未能解决你的问题,请参考以下文章