Daily LeetCode – day0041 0667. Beautiful Arrangement II

// 0667. Beautiful Arrangement II
class Solution {
    public int[] constructArray(int n, int k) {
        int[] ans = new int[n];
        ans[0] = 1;
        int i = 1;
        boolean ascending = true;
        int low = 2;
        int high = n;
        while (k > 1) {
            if (ascending) {
                ans[i] = high;
                --high;
            } else {
                ans[i] = low;
                ++low;
            }
            ascending = !ascending;
            --k;
            ++i;
        }
        if (ascending) {
            while (i < n) {
                ans[i] = ans[i - 1] + 1;
                ++i;
            }
        } else {
            while (i < n) {
                ans[i] = ans[i - 1] - 1;
                ++i;
            }
        }
        return ans;
    }
}
学习笔记:
这是一道有趣的数组题目,一开始没思路。
后来拿出纸笔来举例子就有了。
比如要5个数字,4个变化。
那么就是1,5,2,4,3。
然后多一点,9个数字,8个变化。
1,9,2,8,3,7,4,6,5。低高低高交替
然后思考如果变化变少呢?
9个数字,3个变化。
1,9,2,3,4,5,6,7,8。
也就是低高低高交替,交替前3次,然后就一直持续+1或-1变化就不变了。
这道和之前某个做过的题目很像,我教过学生,但忘记具体是哪题了。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注