2019-04-06 16:09:56

问题描述:

问题求解:

本题还是挺有难度的,主要是要考虑好如何去进行构造。

首先考虑到2 * A[i] = A[j] + A[k],那么j,k就必须是同奇同偶,否则它们的和必为奇数,显然等式不成立。

那么如果我们将N的数组分成两个部分,一部分全奇数,一部分全偶数,并且这两个部分是Beautiful Array,那么将它们concat一下,得到的也是Beautiful Array。

那么如何得到这两个部分呢?

这就需要一些数学的证明了,很容易证明得到漂亮数组满足以下的两个性质。

  • 同乘一个数依然是漂亮数组
  • 同加一个数依然是漂亮数组

得到这两个性质后就可以进行构造了,从{1}开始,每次得到{A * 2 - 1}和{A * 2},显然这两个数组是漂亮数组,并且分别是奇数和偶数数组,将它们concat之后就会得到长度更长的数组,这样就可以构造出来结果需要的数组。

    public int[] beautifulArray(int N) {
List<Integer> res = new ArrayList<>();
res.add(1);
while (res.size() < N) {
List<Integer> tmp = new ArrayList<>();
for (int i : res) if (i * 2 - 1 <= N) tmp.add(i * 2 - 1);
for (int i : res) if (i * 2 <= N) tmp.add(i * 2);
res = tmp;
}
return res.stream().mapToInt(i -> i).toArray();
}

  

漂亮数组 Beautiful Array的更多相关文章

  1. [Swift]LeetCode932. 漂亮数组 | Beautiful Array

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...

  2. LeetCode - Beautiful Array

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...

  3. [LeetCode] 932. Beautiful Array 漂亮数组

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...

  4. 北邮校赛 I. Beautiful Array(DP)

    I. Beautiful Array 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...

  5. [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)

    Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...

  6. 【LeetCode】932. Beautiful Array 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 构造法 递归 相似题目 参考资料 日期 题目地址:h ...

  7. OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别

    OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...

  8. 后缀数组(suffix array)

    参考: Suffix array - Wiki 后缀数组(suffix array)详解 6.3   Suffix Arrays - 算法红宝书 Suffix Array 后缀数组 基本概念 应用:字 ...

  9. 数组(Array),二维数组,三维数组

    数组(Array):相同类型数据的集合就叫做数组. (一)定义数组的方法: A) type[] 变量名 = new type[数组中元素的个数] 例如: int[] a = new int[10] ; ...

随机推荐

  1. PostgreSQL 9.5.x的架构图及外存图

  2. laravel中get()与 first()区别、collection与stdClass的区别

    简单的,laravel里get()得到的是一组数据,first()得到的是一个model数据. 从形式上,laravel里每一个model数据(record),在取出的时候都是用的PHP的stdCla ...

  3. js 闭包,作用域,this 终结篇(转)

    之前有写过闭包,作用域,this方面的文章,但现在想想当时写的真是废话太多了,以至于绕来绕去的,让新手反而更难理解了,所以就有了此篇文章,也好和闭包,作用域,this告一段落. 第一个问题:什么是闭包 ...

  4. cygwin vim can't write .viminfo

    问题 每次退出vim时,都提示 vim can't wirte .viminfo 运行环境 以管理员身份登录win7,并运行cygwin 排查过程 切换到家目录,查看发现.viminfo文件存在. 查 ...

  5. Vue系列之 => 结合webpack使用vue-router

    安装 vue-router cnpm i vue-router -S index.html <!DOCTYPE html> <html lang="en"> ...

  6. Excel控制AutoCad进行坐标标注

    做过工程测绘,平面设计,使用过Autocad制图的朋友们,都经常要在CAD上标注点或者线的坐标,CAD自身的标注功能,并不能同时标注X和Y坐标,,要同时标注X和Y坐标,可以使用南方CASS软件,或者一 ...

  7. 常见mysql的慢查询优化方式

    一,第一步.开启mysql慢查询 方式一: 修改配置文件  在 my.ini 增加几行:  主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录( slow_query_log) 方 ...

  8. 编程规范(初尝ES6与webpack)

    //针对ES6规范(第1-5条)start1.块级作用域let/const取代var:在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. 2.解构赋值1 ...

  9. Java-关于Thread

    1)进程是受操作系统管理的基本运行单元,线程是进程中独立运行的子任务 2)Thread.start()方法通知线程规划器,告知其该线程已经准备完成,可以调用其run方法,这时就是异步的方法:如果直接调 ...

  10. react --- 搭建环境

    搭建react开发环境的准备工作 1. node.js 稳定版本 2. 安装cnpm,用cnpm代替npm 3. 用yarn替代npm yarn的安装:npm install -g yarn 搭建re ...