文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数 n ,请你找到满足下面条件的一个序列:

  • 整数 1 在序列中只出现一次
  • 2 到 n 之间每个整数都恰好出现两次
  • 对于每个 2 到 n 之间的整数 i ,两个 i 之间出现的距离恰好为 i

序列里面两个数 a[i] 和 a[j] 之间的 距离 ,我们定义为它们下标绝对值之差 |j - i|

请你返回满足上述条件中 字典序最大 的序列。题目保证在给定限制条件下,一定存在解。

一个序列 a 被认为比序列 b (两者长度相同)字典序更大的条件是: a 和 b 中第一个不一样的数字处,a 序列的数字比 b 序列的数字大。
比方说,[0,1,9,0] 比 [0,1,5,6] 字典序更大,因为第一个不同的位置是第三个数字,且 9 比 5 大。

示例 1:
输入:n = 3
输出:[3,1,2,3,2]
解释:[2,3,2,1,3] 也是一个可行的序列,
但是 [3,1,2,3,2] 是字典序最大的序列。示例 2:
输入:n = 5
输出:[5,3,1,4,3,5,2,4,2]提示:
1 <= n <= 20

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-the-lexicographically-largest-valid-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 贪心,从大数往小的找,回溯找到一个解就是最大的。
class Solution {int N;vector<int> res;
public:vector<int> constructDistancedSequence(int n) {N = n;vector<int> ans(2*n-1);vector<bool> visnum(n+1, 0);dfs(ans, 0, visnum);return res;}void dfs(vector<int>& ans, int idx, vector<bool>& visnum){if(!res.empty())//因为是从大往小找的,找到一个答案就是最大的return;if(idx == ans.size()){res = ans;return;}if(ans[idx])//idx处已经填过数字,直接下一个dfs(ans, idx+1, visnum);elsefor(int num = N; num >= 1; num--){if(visnum[num]) continue; // 数字填过if(!ans[idx] && num == 1){ans[idx] = num;visnum[num] = true;dfs(ans, idx+1, visnum);visnum[num] = false;ans[idx] = 0;}else if(!ans[idx] && num > 1 && idx+num < ans.size()&& !ans[idx+num]){ans[idx] = ans[idx+num] = num;visnum[num] = true;dfs(ans, idx+1, visnum);visnum[num] = false;ans[idx] = ans[idx+num] = 0;}}}
};

4 ms 6.2 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)相关推荐

  1. Leetcode.1718 构建字典序最大的可行序列

    题目描述: 思路: 这道题目乍看之下没有特别适用的算法,于是尝试用深度优先的方法直接暴力搜索.根据题干描述,最后生成序列的长度为2n-1.为了满足第三个条件,在搜索过程中如果在当前位置(假设对应数字为 ...

  2. Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜

    文章目录 题目 题目链接 题目 题目重述:给定一个数n,求一个长度为2n-1的序列:1只出现一次,2~n之间每个数出现2次,并且 对于2 ~n之间的每个数i,两个i之间相差为i,比如n=3,[3,1, ...

  3. 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字

    [LeetCode]剑指 Offer 44. 数字序列中某一位的数字 文章目录 [LeetCode]剑指 Offer 44. 数字序列中某一位的数字 package offer;public clas ...

  4. 创新工具|如何构建产品的最小可行架构(MVA)

    最小可行产品(MVP) 不仅需要考虑产品的市场可行性,还需要考虑其技术可行性,以便随着时间的推移满足不断变化的需求.将构建最小可行架构(MVA) 纳入 MVP 开发可以帮助团队评估技术可行性,为产品提 ...

  5. Leetcode.1641 统计字典序元音字符串的数目

    题目链接 Leetcode.1641 统计字典序元音字符串的数目 Rating : 1519 题目描述 给你一个整数 n,请返回长度为 n.仅由元音 (a, e, i, o, u)组成且按 字典序排列 ...

  6. LeetCode 1754. 构造字典序最大的合并字符串

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 word1 和 word2 . 你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 ...

  7. LeetCode简单题之最长特殊序列 Ⅰ

    题目 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 .如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) ...

  8. LeetCode 1641. 统计字典序元音字符串的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请返回长度为 n .仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量. 字符串 s 按 字典序排列 需要满足 ...

  9. LeetCode 1061. 按字典序排列最小的等效字符串(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符. 举个例子,如果 A = "abc" 且 B = ...

最新文章

  1. 的table数据重复添加_Mysql的奇技淫巧 - 避免重复插入数据
  2. ios url缓存策略——NSURLCache、 NSURLRequest
  3. 循环序列模型 —— 1.11 双向神经网络
  4. Spring4.x(11)依赖注入-setter方法注入
  5. [20170203]dg磁盘空间不足的处理.txt
  6. iOS UITextView和UITextViewDelegate
  7. Server.MapPath() 探究
  8. 「旅游信息管理系统」 · Java Swing + MySQL 开发
  9. java group by_Java中如何实现对List内容分组(group by)?
  10. 微型计算机中央处理器又称为,微处理器又称为什么
  11. 趋势杀毒软件注意事项
  12. Elasticsearch(二):进阶检索
  13. Invalid bound statement (not found)出现的原因和解决方法
  14. 论文解读:《PACES:mRNA中N4乙酰胞苷(ac4C)修饰位点的预测》
  15. Win7远程连接问题:凭据不工作 没有授权此用户账户
  16. 饿了么美团外卖cps返利系统外卖返利公众号搭建cps系统小程序SaaS源码
  17. JS如何实现多线程?
  18. 数据链路层的功能和以太网帧格式的总结
  19. win10服务器返回为空,CAD出现错误: ActiveX 服务器返回错误: 加载类型库/DLL 时出错...
  20. 小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?

热门文章

  1. C语言信息系统贴吧,急 c语言学生信息管理系统
  2. MapReduce原理全剖析
  3. ios把数据传递到另一个页面_IOS 应用之间的跳转和数据传递详解
  4. viewpager 跳转到指定页面
  5. 1045-Access denied for user 'root'@'localhost'(using password:YES)
  6. 浅谈 JavaScript 编程语言的编码规范--转载
  7. Asp.Net文件和文件夹操作大全
  8. 浅谈“三层结构”原理与用意(转帖)
  9. .Net 1.1下WEB引用Win控件的两个Bug
  10. std::string的resize()与reserve()的区别