zoukankan      html  css  js  c++  java
  • Leetcode 667.优美的排列II

    优美的排列II

    给定两个整数 n 和 k,你需要实现一个数组,这个数组包含从 1 到 n 的 n 个不同整数,同时满足以下条件:

    ① 如果这个数组是 [a1, a2, a3, ... , an] ,那么数组 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应该有且仅有 k 个不同整数;.

    ② 如果存在多种答案,你只需实现并返回其中任意一种.

    示例 1:

    输入: n = 3, k = 1

    输出: [1, 2, 3]

    解释: [1, 2, 3] 包含 3 个范围在 1-3 的不同整数, 并且 [1, 1] 中有且仅有 1 个不同整数 : 1

       

    示例 2:

    输入: n = 3, k = 2

    输出: [1, 3, 2]

    解释: [1, 3, 2] 包含 3 个范围在 1-3 的不同整数, 并且 [2, 1] 中有且仅有 2 个不同整数: 1 和 2

       

    提示:

    1.  n 和 k 满足条件 1 <= k < n <= 104.

    思路

    按照1,k+1,2,k,3,k-1,……的顺序排列,得到的差值为k,k-1,k-2,……,1。
    时间复杂度O(n)。

     1 class Solution {
     2     public int[] constructArray(int n, int k) {
     3         int l=1,r=k+1;
     4         int[] ans=new int[n];
     5         int index=0;
     6         while(l<=r){
     7             ans[index++]=l++;
     8             if(l<=r) ans[index++]=r--;
     9         }
    10         for(int i=k+2;i<=n;i++) ans[index++]=i;
    11         return ans;
    12     }
    13 }
  • 相关阅读:
    ubuntu使用iso作为本地源
    ubuntu配置简单的DNS服务器
    core data
    Core Animation教程
    制作framework&静态库
    notes
    textkit
    coretext
    nsset
    iOS Development Sites
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10394936.html
Copyright © 2011-2022 走看看