漂亮数组解法

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;
    

 

以上是关于漂亮数组解法的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 932. Beautiful Array 漂亮数组(中等)

最大子数组问题的几种解法

[算法] leetcode顺序表相关题目详解

不漂亮的json数组PHP [重复]

最大连续子数组,线性时间解法

算法通关手册 刷题笔记1 数组基础