奇数位递增偶数位递减的数组_LeetCode题目——667. 优美的排列 II

博客围绕给定整数n和k,实现包含1到n的n个不同整数的数组展开。该数组需满足特定差值条件,存在多种答案时返回其一。介绍了两种实现方法,一是循环逆转元素,二是对前k个元素按奇偶位填数,剩余元素顺序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下:

给定两个整数 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

方法一:

从第i个点开始,循环k次,每次逆转i到n的元素,然后i+1。这样的话,每逆转一次,会产生一个不同的差值。代码如下:

class Solution:

def constructArray(self, n: int, k: int) -> List[int]:

res = list(range(1, n + 1))

for i in range(1, k):

res[i:] = res[:i-1:-1]

return res

方法二:

对前k个元素操作(奇数位从1开始往里面填数,1递增,偶数位从n开始往里面填数,n递减),剩余元素按顺序从小到大向后排列即可。代码如下:

class Solution:

def constructArray(self, n: int, k: int) -> List[int]:

arr, s, e, i = [], 1, n, 0

while(s <= e):

if((i < k and i % 2 == 0) or (i >= k and (k - 1) % 2 == 0)):

arr.append(s)

s += 1

else:

arr.append(e)

e -= 1

i += 1

return arr

标签:arr,667,res,整数,II,int,a3,a2,LeetCode

来源: https://blog.youkuaiyun.com/Mr_LiShao/article/details/100583840

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值