每日一题:力扣667. 优美的排列 II

知识浅谈 🐄🐄🐄🐄🐄大佬
后端领域优质创作者
博客专家认证
2022-09-08 11:32:32

题干

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

假设该列表是 answer = [a1, a2, a3, ... , an] ,那么列表 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应该有且仅有 k 个不同整数。
返回列表 answer 。如果存在多种答案,只需返回其中 任意一种 。

题解

class Solution {
    public int[] constructArray(int n, int k) {
        int i,index=1;
        k-=1;
        for(i=n;i>n/2+1&&k>0;i--){
            if(i>index+1){
                if(i-index<=2) k-=1;
                else k-=2;
            }
            index++;
        }
        if(k<0){
            i++;
            index--;
        }
        List<Integer> list = new ArrayList<Integer>();
        for(int j=1;j<index;j++){
            list.add(j);
            list.add(n-j+1);
        }
        if(k<0){
            int j;
            for(j=index;j<=n-index-1;j++){
                list.add(j);
            }
            list.add(j+1);
            list.add(j);
        }else{
            for(int j=index;j<=n-index+1;j++){
                list.add(j);
            }
        }

        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
...全文
8 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
知识浅谈后端社区

1840

社区成员

知识浅谈(带你学后端)社区,旨在为学习后端的小伙伴提供技术内容共享学习平台,助力每位小伙伴写出高质量代码,欢迎各位小伙伴的加入。
java爬虫后端 个人社区 吉林省·长春市
社区管理员
  • 知识浅谈
加入社区
帖子事件
创建了帖子
2022-09-08 11:32
社区公告

【社区倡导与禁止】

  • 社区倡导积极发帖,互相交流技术问题,学习心得。
  • 社区不限制技术领域,后端内容增加加精权重
  • 社区禁止发布低俗、不健康的内容

【社区积分规则】

  • 在社区「发帖」得10积分
  • 内容被管理员「加精」得10积分
  • 点赞他人内容得1积分
  • 评论内容得2积分