667. Beautiful Arrangement II

来源:互联网 发布:js验证手机号码格式 编辑:程序博客网 时间:2024/06/05 11:30

标签(空格分隔): leetcode


    • 原题
    • 分析
    • 代码实现过程中的一些坑
    • 代码


1.原题

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.

2.分析:

只需要输出其中一种,所以,最直接的方法就是凑K出来就行。
注意到 1 <= k < n
也就是提示,range(n)一共最多有k种这类的差值,[(1, n), (2, n-1), (3, n-2)……]

3.代码实现过程中的一些坑:

当k是奇数的时候, 在排好k-1个差值的序列后, 接下来的值需要按照升序排
当k是偶数的时候, 在排好k-1个差值的序列后,接下来的值需要按照降序排

n = 5, k = 2
[1,5] + [4, 3, 2]


n = 5, k = 3
[1,5,2] + [3, 4]

4. 代码

class Solution {public:    vector<int> constructArray(int n, int k) {        vector<int> ans;        int j = 1;        for (int i = 1; i <= k; i++){            if (i%2){                ans.push_back(j);                j++;            }            else {                ans.push_back(n - j + 2);            }        }        if (k%2){            for (int i = k+1; i <= n; i++){                ans.push_back(j++);            }        }        else {            j = n-j+1;            for (int i = k+1; i <= n; i++){                ans.push_back(j--);            }        }        return ans;    }};
原创粉丝点击