利用漂亮陣列的性質:
因為要使乙個陣列為漂亮陣列:
則就要滿足下列性質:
1)對任意的對於每個 i < j,都不存在 k 滿足 i < k < j 使得 a[k] * 2 = a[i] + a[j]。
觀察這個等式的左邊(a[k]*2)它一定是乙個偶數,要使這個等式不成立,則有一種情況一定可以滿足:即令等式右邊
(a[i]+a[j])為乙個奇數即可。
2)對乙個漂亮陣列中的所有數同時加或減乙個數它還是漂亮陣列
3)對乙個漂亮陣列中的所有數同時乘乙個非零的數它還是漂亮陣列
4)乙個由全部奇數構成的漂亮陣列並上乙個全部由偶數構成的漂亮陣列它還是漂亮陣列.如:[1,3,2,4]
借助以上思想:我們可以得出這樣乙個結論:
要求由1->n這個n個數構成的漂亮陣列,我們只需要先求出由1->(n+1)/2,這(n+1)/2個數構成的漂亮陣列l然後再將這l中的每個數 *2-1使其剛好變為1->n中的那(n+1)/2個奇數且正好這(n+1)/2個奇數已經是漂亮陣列了,將作為左半部分,同理再求出1->n/2這n/2個數構成的完美陣列r,再將r中的每個數 *2作為右半部分,然後將左半部分與右半部分組合起來即為1->n這個n個數組成的漂亮陣列
有了這個思路之後我們就可以利用分治思想了不斷劃分子問題求解了
注:1、【1-n這n個數一定是由(n+1)/2個奇數以及(n/2)個偶數構成】
2、[1…(n+1)/2]這(n+1)/2個數同時( *2-1)就變為了[1…n]中的那(n+1)/2個奇數,同理可得偶數時的情況
class solution
int res = new int[n];
int idx = 0;
if(n==1)
//構建奇數部分
for(int x:beautifularray((n+1)/2))
//構建偶數部分
for(int x:beautifularray(n/2))
cache.put(n,res);
return res;
}}
932 漂亮陣列
對於某些固定的 n,如果陣列 a 是整數 1,2,n 組成的排列,使得 對於每個 i j,都不存在 k 滿足 i k j 使得 a k 2 a i a j 那麼陣列 a 是漂亮陣列。給定 n,返回任意漂亮陣列 a 保證存在乙個 解題思路 關於漂亮陣列的性質 首先,不存在 k 滿足 i k j 使得 ...
Leetcode932 漂亮陣列
題目 解題思路 使用遞迴的方法。由題目可知,給定乙個n,給出符合條件的排列。遞迴使大問題變成小問題,將n縮小,縮小到可以輕鬆解決的的大小,所以當n為1時,遞迴結束,返回1.如何將結果合併呢?我們知道當某個陣列排序符合條時,假設該陣列為a,那麼ka n也是符合條件的陣列,k是a的倍數,也就是說a的線性...
leetcode932 漂亮陣列
今天想找幾道分治的題目做做,有些題不用分治的思想做,想光找到直接規律真的有點難,但是分治思想也需要清晰的邏輯才能考慮清楚,還需要多加練習。對於某些固定的 n,如果陣列 a 是整數 1,2,n 組成的排列,使得 對於每個 i j,都不存在 k 滿足 i k j 使得 a k 2 a i a j 那麼陣...