LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)
文章目录
- 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. 构建字典序最大的可行序列(贪心+回溯)相关推荐
- Leetcode.1718 构建字典序最大的可行序列
题目描述: 思路: 这道题目乍看之下没有特别适用的算法,于是尝试用深度优先的方法直接暴力搜索.根据题干描述,最后生成序列的长度为2n-1.为了满足第三个条件,在搜索过程中如果在当前位置(假设对应数字为 ...
- Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜
文章目录 题目 题目链接 题目 题目重述:给定一个数n,求一个长度为2n-1的序列:1只出现一次,2~n之间每个数出现2次,并且 对于2 ~n之间的每个数i,两个i之间相差为i,比如n=3,[3,1, ...
- 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字
[LeetCode]剑指 Offer 44. 数字序列中某一位的数字 文章目录 [LeetCode]剑指 Offer 44. 数字序列中某一位的数字 package offer;public clas ...
- 创新工具|如何构建产品的最小可行架构(MVA)
最小可行产品(MVP) 不仅需要考虑产品的市场可行性,还需要考虑其技术可行性,以便随着时间的推移满足不断变化的需求.将构建最小可行架构(MVA) 纳入 MVP 开发可以帮助团队评估技术可行性,为产品提 ...
- Leetcode.1641 统计字典序元音字符串的数目
题目链接 Leetcode.1641 统计字典序元音字符串的数目 Rating : 1519 题目描述 给你一个整数 n,请返回长度为 n.仅由元音 (a, e, i, o, u)组成且按 字典序排列 ...
- LeetCode 1754. 构造字典序最大的合并字符串
文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 word1 和 word2 . 你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 ...
- LeetCode简单题之最长特殊序列 Ⅰ
题目 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 .如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) ...
- LeetCode 1641. 统计字典序元音字符串的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请返回长度为 n .仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量. 字符串 s 按 字典序排列 需要满足 ...
- LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
文章目录 1. 题目 2. 解题 1. 题目 给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符. 举个例子,如果 A = "abc" 且 B = ...
最新文章
- 的table数据重复添加_Mysql的奇技淫巧 - 避免重复插入数据
- ios url缓存策略——NSURLCache、 NSURLRequest
- 循环序列模型 —— 1.11 双向神经网络
- Spring4.x(11)依赖注入-setter方法注入
- [20170203]dg磁盘空间不足的处理.txt
- iOS UITextView和UITextViewDelegate
- Server.MapPath() 探究
- 「旅游信息管理系统」 · Java Swing + MySQL 开发
- java group by_Java中如何实现对List内容分组(group by)?
- 微型计算机中央处理器又称为,微处理器又称为什么
- 趋势杀毒软件注意事项
- Elasticsearch(二):进阶检索
- Invalid bound statement (not found)出现的原因和解决方法
- 论文解读:《PACES:mRNA中N4乙酰胞苷(ac4C)修饰位点的预测》
- Win7远程连接问题:凭据不工作 没有授权此用户账户
- 饿了么美团外卖cps返利系统外卖返利公众号搭建cps系统小程序SaaS源码
- JS如何实现多线程?
- 数据链路层的功能和以太网帧格式的总结
- win10服务器返回为空,CAD出现错误: ActiveX 服务器返回错误: 加载类型库/DLL 时出错...
- 小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?
热门文章
- C语言信息系统贴吧,急 c语言学生信息管理系统
- MapReduce原理全剖析
- ios把数据传递到另一个页面_IOS 应用之间的跳转和数据传递详解
- viewpager 跳转到指定页面
- 1045-Access denied for user 'root'@'localhost'(using password:YES)
- 浅谈 JavaScript 编程语言的编码规范--转载
- Asp.Net文件和文件夹操作大全
- 浅谈“三层结构”原理与用意(转帖)
- .Net 1.1下WEB引用Win控件的两个Bug
- std::string的resize()与reserve()的区别