667. Beautiful Arrangement II
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 = 1 Output: [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 = 2 Output: [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 nandkare in the range 1 <= k < n <= 104
解题思路:
可以想到如果排列是1-n的话差列只有1,如果将2-n旋转,则变为2,继续旋转则为3,最后排序结果为1,n,2,n-1......
class Solution {
public:
    vector<int> constructArray(int n, int k) {
            vector<int> ret;
            int start=1;
            int end = n;
            
            for(int i=0;i<k;i++){
                if(i%2==0)
                ret.push_back(start++);
                else ret.push_back(end--);
            }
            int temp = ret[k-1];
            if(k%2!=0){//递增
                for(int j=1;j<=n-k;j++)
                    ret.push_back(++temp);
                
            }
            else{
                for(int j=1;j<=n-k;j++)
                    ret.push_back(--temp);
            }
        return ret;
        
    }
};
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号