667. Beautiful Arrangement II(Java)

来源:互联网 发布:平板电脑淘宝开店认证 编辑:程序博客网 时间:2024/06/05 06:39

Given two integers n and k, you need to construct a list which contains n different positive integers ranging from 1 to n and obeys the following requirement:
Suppose this list is [a1, a2, a3, … , an], then the list [|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|] has exactly k distinct integers.

If there are multiple answers, print any of them.

Example 1:

Input: n = 3, k = 1Output: [1, 2, 3]Explanation: The [1, 2, 3] has three different positive integers ranging from 1 to 3, and the [1, 1] has exactly 1 distinct integer: 1.

Example 2:

Input: n = 3, k = 2Output: [1, 3, 2]Explanation: The [1, 3, 2] has three different positive integers ranging from 1 to 3, and the [2, 1] has exactly 2 distinct integers: 1 and 2.

Note:

The n and k are in the range 1 <= k < n <= 10的四次方.

思路:

if you have n number, the maximum k can be n - 1;if n is 9, max k is 8.This can be done by picking numbers interleavingly from head and tail,// start from i = 1, j = n;// i++, j--, i++, j--, i++, j--1   2   3   4   5  9   8   7   6out: 1 9 2 8 3 7 6 4 5dif:  8 7 6 5 4 3 2 1Above is a case where k is exactly n - 1When k is less than that, simply lay out the rest (i, j) in incremental order(all diff is 1). Say if k is 5:     i++ j-- i++ j--  i++ i++ i++ ...out: 1   9   2   8    3   4   5   6   7dif:   8   7   6   5    1   1   1   1 
class Solution {    public int[] constructArray(int n, int k) {        int[] res = new int[n];        int max = n, min = 1;        int i;        for (i = 0; i < k; i ++) {            if (i % 2 != 0) res[i] = max --;            else res[i] = min ++;        }        if (i % 2 == 0) {            for (int j = k; j < n; j ++)                 res[j] = max --;        } else {            for (int j = k; j < n; j ++)                 res[j] = min ++;        }        return res;    }}
原创粉丝点击