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

news2024/11/17 16:41:49

❓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专栏,每日更新!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VM服务管家】VM4.2软件使用_5.4 工具类

目录 1.2.1 平移旋转标定&#xff1a;平移旋转标定模块的使用方法1.2.2 旋转标定&#xff1a;旋转标定模块的使用方法1.2.3 单点抓取&#xff1a;单点抓取模块的使用方法1.2.4 单点纠偏&#xff1a;单点纠偏模块的使用方法1.2.5 单点对位&#xff1a;单点映射对位模块的使用方法…

【PyTorch入门教程】1. 基础知识

欢迎关注 【LearnOpenCV: PyTorch入门教程】 PyTorch入门&#xff1a;Ch1 基础知识 PyTorch入门&#xff1a;[Ch2 使用预训练模型进行图像分类] PyTorch入门&#xff1a;[Ch3 使用迁移学习进行图像分类] PyTorch入门&#xff1a;[Ch4 使用ONNX和Caffe2进行模型推理] PyTorch入门…

中国机器人及人工智能大赛

报名 报名网站&#xff1a;https://www.caairobot.com 报名时&#xff0c;请在队伍名称后边添加任务后缀&#xff0c;比如&#xff0c;“诚朴-A”表明 队伍名称诚朴队&#xff0c;报名完成任务 A 然后在大赛官方 QQ 群 633244198&#xff08;智慧农业-机器人及人工智能大赛&…

力扣刷题215.数组中的第K个最大元素

215.数组中的第K个最大元素 215.数组中的第K个最大元素题目描述思路暴力解法堆排序快速排序 215.数组中的第K个最大元素 215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素…

Postman+Java springboot演示 get post put delete请求并携带(路径 路径问号后 json 表单)参数形式

我们先创建一个java的springboot工程 在项目中 找到启动类的位置目录 在项目创建一个类 叫 user 我是想将 user 当做一个属性类的 按规范来讲 我们可以创建一个entity包 然后在下面去创建属性类 但这里 我们不想搞那么麻烦了 毕竟只是练习一下 然后 user参考代码如下 package…

【Java校招面试】基础知识(五)——GC

目录 前言一、基础概念二、垃圾回收算法三、垃圾收集器四、引用后记 前言 本篇主要介绍Java垃圾回收机制——GC的相关内容。 “基础知识”是本专栏的第一个部分&#xff0c;本篇博文是第五篇博文&#xff0c;如有需要&#xff0c;可&#xff1a; 点击这里&#xff0c;返回本专…

【重新定义matlab强大系列五】函数filloutliers检测并替换数据中的离群值

&#x1f517; 运行环境&#xff1a;matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

PyCharm下载、安装、注册以及简单使用【全过程讲解】

在使用PyCharm IDE之前&#xff0c;请确保自己的计算机里面安装了Python解释器环境&#xff0c;若没有下载和安装可以看看我之前的文章>>>Python环境设置>>>或者还可以观看视频讲解。 注意&#xff1a;本文软件的配置方式仅供个人学习使用&#xff0c;如有侵…

有研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具(下)

导语&#xff1a;研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具。 Apple EFI IM4P分配器 介绍 解析苹果多个EFI固件.im4p文件&#xff0c;并将所有检测到的EFI固件分割为单独的SPI/BIOS映像。 使用 你可以拖放或手动输入包含Apple EFI IM4P固件的文件夹的完整路径。…

【VM服务管家】VM4.2平台SDK_6.3 控件嵌入类

目录 2.3.1 渲染控件&#xff1a;渲染控件上自定义图形的方法2.3.2 参数控件&#xff1a;参数配置控件绑定模块的方法2.3.3 控件颜色&#xff1a;控件颜色修改方法2.3.4 独立控件&#xff1a;二次开发单独显示Group的方法2.3.5 取流控件&#xff1a;实时取流控件的使用方法2.3.…

【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码

【2023年第十一届泰迪杯数据挖掘挑战赛】B题&#xff1a;产品订单的数据分析与需求预测 23页论文及实现代码 相关链接 &#xff08;1&#xff09;建模方案 【2023年第十一届泰迪杯数据挖掘挑战赛】B题&#xff1a;产品订单的数据分析与需求预测 建模及python代码详解 问题一…

python为什么长期霸占榜首

Python霸占榜首 只因它真的很强 Python&#xff0c;年龄可能比很多读者都要大&#xff0c;但是它在更新快速的编程界却一直表现出色&#xff0c;甚至有人把它比作是编程界的《葵花宝典》&#xff0c;只是Python的速成之法相较《葵花宝典》有过之而无不及。 Python简洁&#x…

【Hello Network】UDP协议

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍传输层和UDP协议 UDP协议 传输层端口号端口号范围划分知名端口号端口号与进程netstat与iostatpidof UDP协议UDP协议格式udp的数据封装udp的数…

2.2磁盘分区

2.2 磁盘分区 一个磁盘可以被划分为多个分区&#xff0c;有一个磁盘并且将他们划分为C;D;E盘&#xff0c;那个C,D,E就是分区&#xff08;partition&#xff09;。 2.2.1 磁盘连接的方式与设备文件名的关系 个人计算机常见的磁盘接口有两种&#xff0c;分别是SATA与SAS接口&…

精品:Stimulsoft Forms 2023.2.2

Stimulsoft Forms 是一种用于创建、编辑、填写、发布、分发交互式表单和收集结果的工具。我们的产品可嵌入到应用程序中&#xff0c;并允许您创建各种自定义填充模板。丰富的功能使模板具有真正的交互性。用户会收到 PDF 格式的可填写表格&#xff0c;他们可以在任何支持此格式…

ZooKeeper安装与配置集群

简介: ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布…

ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗&#xff1f;【AI版】 无意间的刷到的视频一、提需求二、ChatGPT用Python编写代码三、意外的解释四、ChatGPT改用Java编写代码五、GPT第二次生成Java代码尾巴 无意间的刷到的视频 晚上在家刷视频&#xff0c;突然看到一个在讲关于AI编程的视频&#…

网络安全:网络信息安全的概述.

网络安全&#xff1a;网络信息安全的概述 网络信息安全是一门涉及计算机科学&#xff0c;网络技术&#xff0c;通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。 它主要是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不受…

深度学习 -- Pytorch学习 数据集API Dataset与DataLoader 重载鸢尾花数据集

前言 在模型训练的步骤中&#xff0c;数据的部分非常重要&#xff0c;它的过程主要分为数据收集、数据划分、数据读取、数据预处理。 数据收集的有原始样本和标签(Img&#xff0c;label) 数据集的划分需要分为训练集、验证集、测试集。 训练集负责训练模型&#xff0c;验证集…

C++基础知识快速入门

目录 一, 命名空间 1.1命名空间使用命名空间中成员该如何使用呢&#xff1f; 1.2 命名空间其他2种使用方式&#xff1a; 1. using 将其中一个成员引入 2. using namespace 二&#xff0c;C输入&输出 &#xff08;简单运用&#xff09; 2. 1 头文件 2. 2 cout 与 …