Skip to content

Commit 8489d4c

Browse files
committed
漂亮数组
1 parent dcd9a1f commit 8489d4c

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.leetcode_cn.medium;
2+
3+
import java.util.Arrays;
4+
5+
/***************漂亮数组*************/
6+
/**
7+
* 对于某些固定的 N,如果数组 A 是整数 1, 2, ..., N 组成的排列,使得:
8+
*
9+
* 对于每个 i < j,都不存在 k 满足 i < k < j 使得 A[k] * 2 = A[i] + A[j]。
10+
*
11+
* 那么数组 A 是漂亮数组。
12+
*
13+
* 给定 N,返回任意漂亮数组 A(保证存在一个)。
14+
*
15+
* 示例 1:
16+
*
17+
* 输入:4
18+
*
19+
* 输出:[2,1,4,3]
20+
*
21+
* 示例 2:
22+
*
23+
* 输入:5
24+
*
25+
* 输出:[3,1,2,5,4]  
26+
*
27+
* 提示:
28+
*
29+
* 1 <= N <= 1000
30+
*
31+
* @author ffj
32+
*
33+
*/
34+
public class BeautifulArray {
35+
36+
public static void main(String[] args) {
37+
int N = 5;
38+
int[] result = new BeautifulArray().beautifulArray(N);
39+
System.out.println(Arrays.toString(result));
40+
}
41+
42+
/**
43+
* 漂亮数组有以下的性质:
44+
*
45+
* (1)A是一个漂亮数组,如果对A中所有元素添加一个常数,那么A还是一个漂亮数组。
46+
*
47+
* (2)A是一个漂亮数组,如果对A中所有元素乘以一个常数,那么A还是一个漂亮数组。
48+
*
49+
* (3)A是一个漂亮数组,如果删除一些A中所有元素,那么A还是一个漂亮数组。
50+
*
51+
* (4) A是一个奇数构成的漂亮数组,B是一个偶数构成的漂亮数组,那么A+B也是一个漂亮数组
52+
* 比如:{1,5,3,7}+{2,6,4,8}={1,5,3,7,2,6,4,8}也是一个漂亮数组。
53+
*
54+
* 所以我们假设一个{1-m}的数组是漂亮数组,可以通过下面的方式构造漂亮数组{1-2m}:
55+
*
56+
* 1.对{1-m}中所有的数乘以2-1,构成一个奇数漂亮数组A。如{1,3,2,4},可以得到{1,5,3,7}
57+
* 2.对{1-m}中所有的数乘以2,构成一个偶数漂亮数组B,如{1,3,2,4}, 可以得到{2,6,4,8}
58+
* 3.A+B构成了{1-2m}的漂亮数组。{1,5,3,7}+{2,6,4,8}={1,5,3,7,2,6,4,8}
59+
*
60+
* 4.从中删除不要的数字即可。
61+
*
62+
*
63+
* @param N
64+
* @return
65+
*/
66+
public int[] beautifulArray(int N) {
67+
int[] nums = new int[N];
68+
nums[0] = 1;
69+
if (N == 1)
70+
return nums;
71+
int m = N - 1;
72+
int k = 1;
73+
while (m != 1) {
74+
m >>= 1;
75+
k <<= 1;
76+
}
77+
int i = 1, t = 1, j;
78+
while (i < N) {
79+
for (j = 0; j < t; j++) {
80+
if (nums[j] + k <= N) {
81+
nums[i] = nums[j] + k;
82+
i++;
83+
}
84+
}
85+
t = i;
86+
k >>= 1;
87+
}
88+
return nums;
89+
}
90+
91+
}

0 commit comments

Comments
 (0)