[Leetcode][第491题][JAVA][递增子序列][回溯][RK算法]

【问题描述】[中等]

在这里插入图片描述
在这里插入图片描述

【解答思路】

1. 二进制枚举 + 哈希

在这里插入图片描述

复杂度
在这里插入图片描述

class Solution {List<Integer> temp = new ArrayList<Integer>();List<List<Integer>> ans = new ArrayList<List<Integer>>();Set<Integer> set = new HashSet<Integer>();int n;public List<List<Integer>> findSubsequences(int[] nums) {n = nums.length;//遍历所有可能 3位 由000-111(7=1<<3)for (int i = 0; i < (1 << n); ++i) {findSubsequences(i, nums);int hashValue = getHash(263, (int) 1E9 + 7);if (check() && !set.contains(hashValue)) {ans.add(new ArrayList<Integer>(temp));set.add(hashValue);}}return ans;}
//7 ->111  全都选public void findSubsequences(int mask, int[] nums) {temp.clear();for (int i = 0; i < n; ++i) {if ((mask & 1) != 0) {temp.add(nums[i]);}mask >>= 1;}}
//RK算法 public int getHash(int base, int mod) {int hashValue = 0;for (int x : temp) {//数组中有负数,范围是[-100, 100],加101相当于将数组中的数往上提了100,并不会影响hash函数值的唯一性hashValue = hashValue * base % mod + (x + 101);hashValue %= mod;}return hashValue;}
//检查是否有序public boolean check() {for (int i = 1; i < temp.size(); ++i) {if (temp.get(i) < temp.get(i - 1)) {return false;}}return temp.size() >= 2;}
}
2. 递归枚举 + 减枝

一个递归枚举子序列的通用模板,即用一个临时数组temp 来保存当前选出的子序列,使用cur 来表示当前位置的下标,在 dfs(cur, nums) 开始之前,[0,cur−1] 这个区间内的所有元素都已经被考虑过,而[cur,n] 这个区间内的元素还未被考虑。在执行 dfs(cur, nums) 时,我们考虑 cur 这个位置选或者不选,如果选择当前元素,那么把当前元素加入到temp 中,然后递归下一个位置,在递归结束后,应当把temp 的最后一个元素删除进行回溯;如果不选当前的元素,直接递归下一个位置。

List<List<Integer>> ans = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
public void dfs(int cur, int[] nums) {if (cur == nums.length) {// 判断是否合法,如果合法判断是否重复,将满足条件的加入答案if (isValid() && notVisited()) {ans.add(new ArrayList<Integer>(temp));}return;}// 如果选择当前元素temp.add(nums[cur]);dfs(cur + 1, nums);temp.remove(temp.size() - 1);// 如果不选择当前元素dfs(cur + 1, nums);
}

在这里插入图片描述

复杂度
在这里插入图片描述

class Solution {List<Integer> temp = new ArrayList<Integer>();List<List<Integer>> ans = new ArrayList<List<Integer>>();public List<List<Integer>> findSubsequences(int[] nums) {dfs(0, Integer.MIN_VALUE, nums);return ans;}public void dfs(int cur, int last, int[] nums) {if (cur == nums.length) {if (temp.size() >= 2) {ans.add(new ArrayList<Integer>(temp));}return;}if (nums[cur] >= last) {temp.add(nums[cur]);dfs(cur + 1, nums[cur], nums);temp.remove(temp.size() - 1);}if (nums[cur] != last) {dfs(cur + 1, last, nums);}}
}链接:https://leetcode-cn.com/problems/increasing-subsequences/solution/di-zeng-zi-xu-lie-by-leetcode-solution/

【总结】

1. 一个递归枚举子序列的通用模板,即用一个临时数组temp 来保存当前选出的子序列,使用cur 来表示当前位置的下标,在 dfs(cur, nums) 开始之前,[0,cur−1] 这个区间内的所有元素都已经被考虑过,而[cur,n] 这个区间内的元素还未被考虑。在执行 dfs(cur, nums) 时,我们考虑 cur 这个位置选或者不选,如果选择当前元素,那么把当前元素加入到temp 中,然后递归下一个位置,在递归结束后,应当把temp 的最后一个元素删除进行回溯;如果不选当前的元素,直接递归下一个位置。
List<List<Integer>> ans = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
public void dfs(int cur, int[] nums) {if (cur == nums.length) {// 判断是否合法,如果合法判断是否重复,将满足条件的加入答案if (isValid() && notVisited()) {ans.add(new ArrayList<Integer>(temp));}return;}// 如果选择当前元素temp.add(nums[cur]);dfs(cur + 1, nums);temp.remove(temp.size() - 1);// 如果不选择当前元素dfs(cur + 1, nums);
}
2.RK算法 哈希散列表

【数据结构与算法】字符串匹配 BF算法 RK算法

转载链接:https://leetcode-cn.com/problems/increasing-subsequences/solution/di-zeng-zi-xu-lie-by-leetcode-solution/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装cheat和tldr

1.安装python和pip sudo yum -y install epel-release sudo yum install -y python python-pip python-setuptools sudo pip install --upgrade pip 2.安装tldr sudo pip install cheat tldr #最近遇到安装tldr时提示setuptools too old的报错&#xff0c;解决方法如下 pip ins…

第五十七期:小型企业将如何从5G中受益

在足够多的新设备进入主流市场之前&#xff0c;5G已经在许多领域引起了越来越多的关注。从IT、零售、交通和制造业到医疗、娱乐、教育和农业&#xff0c;几乎每个行业都将在某种程度上受到5G的影响。 作者&#xff1a;李雪薇来源&#xff1a;IT168网站 在足够多的新设备进入主…

array专题

581 Shortest Unsorted Continuous Subarray 问题&#xff1a;这道题目感概颇多&#xff0c;作为第一个array的简单题目就被缠住了。具体内容写在注释里面了。 217 Contains Duplicate 问题&#xff1a;这道题目可以看出有效的数字组合就是0&#xff0c;10,11三种组合。当遍…

第三十二期:MySQL常见的图形化工具

MySQL作为一款非常流行的、开源的关系型数据库&#xff0c;应用非常广泛。因为MySQL开源的缘故&#xff0c;图形化管理维护工众多&#xff0c;除了系统自带的命令行管理工具之外&#xff0c;还有许多其他的图形化管理工具&#xff0c;这里介绍几个经常使用的MySQL图形化管理工具…

centos7 源码安装goaccess

1. 使用yum安装在不同服务器上可能失败, 推荐使用源码安装goaccess # 安装依赖 yum install -y ncurses-devel GeoIP-devel.x86_64 tokyocabinet-devel openssl-devel# 下载源码包并安装 cd /usr/local/software wget http://tar.goaccess.io/goaccess-1.3.tar.gz tar -xvf goa…

【数据结构与算法】字符串匹配 BM算法

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 BM算法 BM算法的核心思想是通过将模式串沿着主串大踏步的向后滑动&#xff0c;从而大大减少比较次数&#xff0c;降低时间复杂度。而算法的关键在于如何兼顾步子迈得足够大与无遗漏&…

array专题2---理解暴力枚举与动态规划

746 Min Cost Climbing Stairs 一直以后对暴力枚举&#xff08;又称&#xff1a;深度优先搜索&#xff09;和动态规划不太理解&#xff0c;不能明白个中区别&#xff0c;更别说贪心。今天做这道题目的时候有点心得。 思路一&#xff1a;看到题目&#xff0c;直觉告诉我暴力枚…

第五十八期:AI艺术日渐繁荣,未来何去何从?

本文的配图都是AI艺术领域领导者、德国艺术家马里奥克林格曼(Mario Klingemann)利用人工智能创作的作品。 利用人工智能创作而成的画作近年来越来越受瞩目&#xff0c;有的作品甚至能在知名拍卖行拍得高价。但这类作品仍有不少问题需要解答&#xff0c;比如它的作者是开发出算…

【数据结构与算法】字符串匹配 KMP 算法

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 KMP 算法 KMP 算法是根据三位作者&#xff08;D.E.Knuth&#xff0c;J.H.Morris 和 V.R.Pratt&#xff09;的名字来命名的&#xff0c;算法的全称是 Knuth Morris Pratt 算法&#x…

array专题3-一道题目不断分析就会慢慢有了思路

#697 Degree of an Array 我承认慢慢有了思路的前提是你要见过那些解法&#xff0c;否则怎么想也想不到。多做题目&#xff0c;就像是多看书一样重要。 问题&#xff1a;一个数组的度这个数组中出现次数最多元素的出现次数。要找的是最短的子数组&#xff0c;而这个数组的度原数…

第五十九期:商用数据库之死:Oracle 面临困境

作者&#xff1a;John Freeman、Fred McClimans 和 Zach Mitchell 我们预计到 2021 年&#xff0c;年产值 296 亿美元的商业数据库市场会收缩 20% 至 30%&#xff0c;认为 Oracle 无法让收入来源足够快地实现转型&#xff08;从传统的商业数据库转向基于云的订购产品&#xff0…

基于上一篇AS项目依赖库问题的优化解决方案

//TODO 转载于:https://www.cnblogs.com/Jhon-Mr/p/10839548.html

【数据结构与算法】【应用】字符串匹配

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 一、单模式串匹配&#xff1a; BF&#xff1a; 简单场景&#xff0c;主串和模式串都不太长, O(m*n)KP&#xff1a;字符集范围不要太大且模式串不要太长&#xff0c; 否则hash值可能冲…

第六十期:华为:希望把VR/AR打造成下个智能手机产业

网易科技讯 10 月 19 日消息&#xff0c;2019 世界 VR 产业大会在江西省南昌市举行。华为轮值董事长郭平发表了《打造 VR/AR 信息高速公路&#xff0c;支撑产业繁荣》的主题演讲。郭平认为&#xff0c;VR/AR 将成为 5G 时代的首批应用&#xff0c;与 5G 产业发展节奏高度匹配并…

array专题4

674 Longest Continuous Increasing Subsequence 问题&#xff1a;比较简单&#xff0c;直接看代码。问题是速度更快的代码是什么样子&#xff1f; 代码 665 Non-decreasing Array 思路&#xff1a;非降序数组&#xff0c;能有一次修改的机会。那就是查找 array[i1]<arr…

零基础入门stm32需要学这些东西

1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解&#xff0c;请立即阅读STM32的文档&#xff0c;以获取最基本的知识点。 如果你手上拥有ST官方主推的STM32神舟系列的板子&#xff0c;那么光盘都会配好这些文档&#xff0c;ST…

【数据结构与算法】字符串匹配 AC自动机

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 AC 自动机 AC 自动机实际上就是在 Trie 树之上&#xff0c;加了类似 KMP 的 next 数组&#xff0c;只不过此处的 next 数组是构建在树上罢了。 AC 自动机的构建 将多个模式串构建成…

第六十一期:中国农民花3000块,发明史上最牛输入法!曾火遍中国20年

投递人 itwriter “王旁青头戋(兼)五一&#xff0c;土十二干士寸雨” 如果你还能熟练的背出这段口诀&#xff0c;恭喜你&#xff0c;又暴露年龄了。 倒回到十几年前&#xff0c;在刀哥被老师带到穿鞋套才能进神秘的机房&#xff0c;练习打字的时候&#xff0c;会五笔的人简直是…

数学归纳法证明Nicomachus's Theorem

今天看了《计算机程序设计艺术卷1》的部分内容。也希望更深入了解一下数学归纳法。所以将网页基本算重新写了一遍&#xff0c;写下证明过程。 理论Theorem 1311312335233533791133791143131517194313151719… 总的来说&#xff1a; ∀n∈N>0,n3∑ni1(n2−n2∗i−1)(n2−n…

第六十二期:腾讯云发布“小程序·云开发十大优秀实践”:猫眼、唯品会等入选

作者&#xff1a;周小白 【TechWeb】10 月 19 日消息&#xff0c;今日&#xff0c;腾讯云首次对外公布了“小程序云开发十大优秀实践”&#xff0c;包括白鹭引擎、千墨科技、腾讯新闻、即速应用、微盟、唯品会、猫眼、香格里拉、微信读书、微信支付等&#xff0c;涉及多个行业。…