932. 漂亮数组

932. 漂亮数组

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:

原题链接:

932. 漂亮数组
https://leetcode.cn/problems/beautiful-array/description/

完成情况:

932. 漂亮数组_第1张图片

解题思路:

 nums 是由范围 [1, n] 的整数组成的一个排列。
 对于每个 0 <= i < j < n ,均不存在下标 k(i < k < j)使得 2 * nums[k] == nums[i] + nums[j] 。

 题目解释:
 【输入】   -> 输入一个n,n即长度,用到的数字,则是1-n这n数字
 【输出】   输出,由1-n这n数字组成的一个数组,然后数组要满足一下的条件,即不存在:
            对于每个 0 <= i < j < n ,均不存在下标 k(i < k < j)使得 2 * nums[k] == nums[i] + nums[j] 。

 解题思路:
    个人感觉肯定需要用到的是dp,即因为需要找到一个满足上要求的数组,则至少要保证在,之前的长度中,他其实就需要满足长度需求。
    即,在原本已经满足题目要求的完美数组中,我又重新插入一个新的数组,然后这个数组我又去找到一个合适的插入位置,使它满足要求。

932. 漂亮数组_第2张图片

参考代码:

package LeetCode中等题;

import java.util.HashMap;
import java.util.Map;

public class __932漂亮数组__发现规律_进行分治 {
    /**
     nums 是由范围 [1, n] 的整数组成的一个排列。
     对于每个 0 <= i < j < n ,均不存在下标 k(i < k < j)使得 2 * nums[k] == nums[i] + nums[j] 。

     题目解释:
     【输入】   -> 输入一个n,n即长度,用到的数字,则是1-n这n数字
     【输出】   输出,由1-n这n数字组成的一个数组,然后数组要满足一下的条件,即不存在:
                对于每个 0 <= i < j < n ,均不存在下标 k(i < k < j)使得 2 * nums[k] == nums[i] + nums[j] 。

     解题思路:
        个人感觉肯定需要用到的是dp,即因为需要找到一个满足上要求的数组,则至少要保证在,之前的长度中,他其实就需要满足长度需求。
        即,在原本已经满足题目要求的完美数组中,我又重新插入一个新的数组,然后这个数组我又去找到一个合适的插入位置,使它满足要求。


     * @param n
     * @return
     */
    Map<Integer,int []> memo = new HashMap<Integer,int []>();
    public int[] beautifulArray(int n) {
        return partition_findRule(n);
    }

    /**
     *
     * @param n
     * @return
     */
    private int[] partition_findRule(int n) {
        if (memo.containsKey(n)){
            return memo.get(n);
        }
        int res [] = new int[n];
        if (n == 1){
            res[0] = 1;
        }else{
            int temp = 0;
            for (int x:partition_findRule((n+1)/2)){    //取所有的偶数odds
                res[temp++] = 2 * x - 1;
            }
            for (int x:partition_findRule(n/2)){    //取所有的奇数evens
                res[temp++] = 2 * x;
            }
        }
        memo.put(n,res);
        return res;
    }
}

你可能感兴趣的:(算法知识,#,LeetCode题解,java学习,leetcode,java,算法,分治法)