前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【月度刷题计划同款】常规"脑筋急转弯"类构造题

【月度刷题计划同款】常规"脑筋急转弯"类构造题

作者头像
宫水三叶的刷题日记
发布2023-09-07 09:53:11
2070
发布2023-09-07 09:53:11
举报

题目描述

这是 LeetCode 上的「667. 优美的排列 II」,难度为「中等」

Tag : 「构造」、「脑筋急转弯」

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

假设该列表是

answer = [a_1, a_2, a_3, ... , a_n]

,那么列表

[|a_1 - a_2|, |a_2 - a_3|, |a_3 - a_4|, ... , |a_{n-1} - a_n|]

中应该有且仅有 k 个不同整数。

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

示例 1:

代码语言:javascript
复制
输入:n = 3, k = 1

输出:[1, 2, 3]

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

示例 2:

代码语言:javascript
复制
输入:n = 3, k = 2

输出:[1, 3, 2]

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

提示:

1 <= k < n <= 10^4

构造

给定范围在

[1, n]

n

个数,当「直接升序/降序」排列时,相邻项差值为

1

,仅一种;而从首位开始按照「升序」间隔排列,次位开始按照「降序」间隔排列(即排列为 [1, n, 2, n - 1, 3, ...])时,相邻差值会从

n - 1

开始递减至

1

,共

n - 1

种。

那么当我们需要构造

k

种序列时,我们可以先通过「直接升序」的方式构造出若干个

1

,然后再通过「间隔位分别升降序」的方式构造出从

k

1

的差值,共

k

个。

显然,我们需要

k + 1

个数来构造出

k

个差值。因此我们可以先从

1

开始,使用

n - (k + 1)

个数来直接升序(通过方式一构造出若干个

1

),然后从

n - k

开始间隔升序排列,按照

n

开始间隔降序排列,构造出剩下的序列。

Java 代码:

代码语言:javascript
复制
class Solution {
    public int[] constructArray(int n, int k) {
        int[] ans = new int[n];
        int t = n - k - 1;
        for (int i = 0; i < t; i++) ans[i] = i + 1;
        for (int i = t, a = n - k, b = n; i < n; ) {
            ans[i++] = a++;
            if (i < n) ans[i++] = b--;
        }
        return ans;
    }
}

TypeScript 代码:

代码语言:javascript
复制
function constructArray(n: number, k: number): number[] {
    const ans = new Array<number>(n).fill(0)
    const t = n - k - 1
    for (let i = 0; i < t; i++) ans[i] = i + 1
    for (let i = t, a = n - k, b = n; i < n; ) {
        ans[i++] = a++
        if (i < n) ans[i++] = b--
    }
    return ans
};
  • 时间复杂度:
O(n)
  • 空间复杂度:
O(n)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宫水三叶的刷题日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 构造
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档