( 数组和矩阵) 667. 优美的排列 II ——【Leetcode每日一题】

2023-05-16

❓667. 优美的排列 II

难度:中等

给你两个整数 nk ,请你构造一个答案列表 answer ,该列表应当包含从 1n n 个不同正整数,并同时满足下述条件:

假设该列表是 answer = [a1, a2, a3, ... , an] ,那么列表 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应该有且仅有 k 个不同整数。

返回列表 answer 。如果存在多种答案,只需返回其中 任意一种

示例 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 < = k < n < = 1 0 4 1 <= k < n <= 10^4 1<=k<n<=104

💡思路:

k=1 时,我们将 1∼n 按照 [1,2,⋯ ,n]的顺序进行排列,那么相邻的差均为 1,满足 k=1 的要求。

k=n−1 时,我们将 1∼n 按照 [1, n, 2, n−1, 3, ⋯ ]的顺序进行交叉排列,那么相邻的差从 n−1 开始,依次递减 1。这样一来,所有从 1n−1的差值均出现一次,满足 k = n−1的要求。

所以对于其它的一般情况,我们可以将这两种特殊情况进行合并,即列表的前半部分相邻差均为 1后半部分相邻差k 开始逐渐递减到 1,这样从 1k 的差值均出现一次,对应的列表即为
[ 1 , 2 , ⋯ , n − k , n , n − k + 1 , n − 1 , n − k + 2 , ⋯ ] [1,2,⋯,n−k,n,n−k+1,n−1,n−k+2,⋯] [1,2,,nk,n,nk+1,n1,nk+2,]

🍁代码:(Java、C++)

Java

class Solution {
    public int[] constructArray(int n, int k) {
        int[] ans = new int[n];
        for(int i = 1; i <= n - k; i++){//前半部分相邻差均为1
            ans[i - 1] = i;
        }
        int low = n - k + 1;
        int high = n;
        int i = n - k;
        while(low <= high){//后半部分交叉排序
            ans[i++] = high--;
            if(i >= n) break;
            ans[i++] = low++;
        }
        return ans;
    }
}

C++

class Solution {
public:
    vector<int> constructArray(int n, int k) {
        vector<int> ans(n);
        for(int i = 1; i <= n - k; i++){//前半部分相邻差均为1
            ans[i - 1] = i;
        }
        int low = n - k + 1;
        int high = n;
        int i = n - k;
        while(low <= high){//后半部分交叉排序
            ans[i++] = high--;
            if(i >= n) break;
            ans[i++] = low++;
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1),这里不计入返回值需要的空间,只需常数级空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

( 数组和矩阵) 667. 优美的排列 II ——【Leetcode每日一题】 的相关文章

  • ffmpeg av_read_frame返回AVERROR_EOF

    最近在调试的时候总是发现av read frame 返回AVERROR EOF xff0c 但是我这是网络传输rtsp xff0c 怎么会是文件结尾呢 xff0c 网络上搜了一下没结果 xff0c 只能自己看源码了 xff0c 结果发现在t
  • windows10远程登陆切换用户

    在windows10下部署IIS网站时 xff0c 利用Administrator部署过程中总是出现各种问题 xff0c 因此选择用普通账户进行部署 xff0c 由于电脑只能远程登陆 xff0c 这里记录一下 xff0c 作为以后的参考 打
  • 教你如何用Dockerfile自定义构建一个Nodejs环境Docker镜像

    教你如何用Dockerfile自定义构建一个Nodejs环境Docker镜像 注意 xff1a 请先安装Docker工具 废话少说 xff0c 直接上Dockerfile 使用Python3基础镜像 FROM python 3 10 alp
  • Centos7安装mongoDB详细过程

    添加MongoDB的YUM仓库 在终端中执行以下命令 xff0c 添加MongoDB的YUM仓库 xff1a sudo vi etc yum repos d mongodb org 4 4 repo 在打开的文件中 xff0c 输入以下内容

随机推荐

  • python:性能优化(一)

    python性能优化 01 在列表里面计数 性能 xff1a 第二种计数方法比第一种快不要太多 xff0c 因为Python原生的内置函数都是优化过的 xff0c 所以能用原生的计算的时候 xff0c 尽量用原生的函数来计算 xff0c 所
  • 这20个Pandas函数一定要牢记,建议收藏!!

    来自 xff1a Deephub IMBA Pandas 是数据科学社区中使用最广泛的库之一 xff0c 它是一个强大的工具 xff0c 可以进行数据操作 清理和分析 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例 我们将
  • multipart/form-data方式上传text以及文件,类似微博发照片

    actionUrl 地址 params text参数以及值 files 文件参数以及文件 username 认证用户名 passwd 认证密码 public static String postFile String actionUrl M
  • UOS Deepin Linux 系统引导丢失修复

    本篇文章讲解通俗易懂 xff0c 以全新的方式修复引导 xff0c 但第一次使用可能会比较麻烦 xff0c 适用于Linux小白用户 也适合别的方法看不懂 不会操作 操作无效等情况 xff08 就是那种操作没有一点问题 xff0c 但就是搞
  • 机会总是留给有准备的人

    qqq
  • chrome---分析js、css脚本的使用率

    打开开发者工具 gt 点击三个点 xff08 选More tools xff09 gt 选中coverage gt 点击reload gt 双击脚本 xff08 进去可以看到脚本哪些内容被用到 xff0c 哪些没有被用到 xff09
  • 【Java生产者消费者问题总结】

    java生产者消费者问题总结 1 wait notify方法实现 public class Test private static Integer count 61 0 private final Integer FULL 61 5 定义生
  • Spring知识点总结 Spring基础到深入(持续更新)

    1 概述 Spring是一个开源框架 Spring为简化企业级开发而生 xff0c 使用Spring xff0c JavaBean就可以实现很多以前要靠EJB才能实现的功能 同样的功能 xff0c 在EJB中要通过繁琐的配置和复杂的代码才能
  • L1-020 帅到没朋友 (20分)

    当芸芸众生忙着在朋友圈中发照片的时候 xff0c 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 xff1a 输入第一行给出一个正整数N xff08 100 xff09 xff0c 是已知朋友圈的个数 xff1
  • L1-002 打印沙漏 (20分)

    注意 xff1a 不用输出符号后面的空格 AC代码 xff1a include lt iostream gt using namespace std int main int n int sum 61 1 int i 61 1 该行的个数
  • Java 后缀表达式求值

    PositifixExpression类 import java util Stack 后缀表达式求值 public class PostfixExpression extends Thread public static void mai
  • c++-----vector开辟空间

    include lt bits stdc 43 43 h gt using namespace std int main int n 61 3 vector lt int gt c for int i 61 0 i lt n i 43 43
  • c++---string遇到空格读取结束问题

    string类基本的输入函数有如下几个 xff1a 1 xff09 istream amp operator gt gt istream amp string amp 2 xff09 istream amp getline istream
  • android中ScrollView中TextView无法铺满全屏解决方案

    在ScrollView的xml中加入 android fillViewport 61 34 true 34 属性就OK
  • java---HashSet用法

    import java util public class Demo public static void main String args HashSet不允许有重复的元素 主要用于哈希算法确定元素在集合中的位置 Set set 61 n
  • java----setLayout(null)

    未设置Layout时 xff0c java默认为flowLayout布局的 xff0c 设置为null即为清空布局管理器 xff0c 之后添加组件 xff0c 常常是设置组件左上角坐标相对于容器左上角 xff08 0 xff0c 0 xff
  • java mkdir()和mkdirs()区别

    mkdirs 可以建立多级文件夹 xff0c mkdir 只会建立一级的文件夹 xff0c 如下 xff1a new File 34 tmp one two three 34 mkdirs 执行后 xff0c 会建立tmp one two
  • Vue——v-show的使用——2020.11.18

    一丶v show xff08 一 xff09 v show的用法和v if非常相似 xff0c 也用于决定一个元素是否渲染 xff08 二 xff09 v if和v show都可以决定一个元素是否渲染 xff0c 那么开发中我们如何选择呢
  • IDEA中Spring环境配置和简单使用

    IDEA中Spring环境配置和简单使用 官网地址Spring下载IDEA中Spring的配置和使用 最近在B站学习尚硅谷的Spring项目 xff0c 做一下笔记 官网地址 官网地址链接 spring 官网界面如下 xff1a Sprin
  • ( 数组和矩阵) 667. 优美的排列 II ——【Leetcode每日一题】

    667 优美的排列 II 难度 xff1a 中等 给你两个整数 n 和 k xff0c 请你构造一个答案列表 answer xff0c 该列表应当包含从 1 到 n 的 n 个不同正整数 xff0c 并同时满足下述条件 xff1a 假设该列