首页 > 编程语言 >算法总结——堆栈、字符串、数组类题目

算法总结——堆栈、字符串、数组类题目

时间:2023-05-31 16:37:57浏览次数:37  
标签:题目 问题 字符串 算法 数组 堆栈 排序 stack

先说stack的题目

stack的实现:链表,数组

题目:

(1)简单的:min stack,一个数组实现三个stack

(2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解)

(3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(two sum思路)

(4)***stack排序问题***:为stack排序,从柱状图里找最大矩形(本质上类似stack排序),构造数组的maxtree(和最大矩形题目类似思路)

(5)蛋疼的其他问题:仅使用递归反转一个stack(两个递归函数,***hard***)

 

再说队列的题目

队列的实现:链表

题目:猫狗队列(链表合并),两个stack实现队列,数组滑动窗口的最大值(类似stack排序做,和柱状里找最大矩形题目解法有点类似,***hard***)

 

最后是堆的题目

题目:

(1)经典问题:合并多个有序链表,行列有序矩阵topK(k*logk解法,j+1,i+1)

(2)***需要观察总结规律的***:数组滑动窗口的最大值(使用优先级队列剔除“过期”的最大值),最大值-最小值<=num的子数组数目(滑动窗口+堆)

 

 

 

算法总结——数组和字符串问题
先说字符串的题目

(1)简单问题:变形词,字符判重,是否为字符串旋转,reverse字符串,字符串压缩(a3b2这种,计数器),单词替换,翻转字符串(通常两两翻转搞定),括号字符串问题(stack问题)

(2)经典问题:数字验证,字符串转数字(状态机),编辑距离(DP),公式字符串求值(python eval,本质上也是状态机实现),Trie,正则表达式匹配(递归简单,DP难)

(3)dfs:提取单词(dfs,如果是最多单词则dp),从去.字串里提取IP地址,字符串的全排列(abc、acb...使用swap+一个for)

(3)涉及二分查找问题:有序+NULL的字符串数组查找,01字符串边界问题

(4)涉及双指针问题:单词数组中两个单词的最小距离,字符串中最长不重复子串,一个字符串中包含另外一个字符串(不要求有序)的最长子串长度,

(5)DP问题:添加最少字符整体变成回文(双dp)

(6)其他:产生括号对(递归+剪枝),数字字符串相乘(用数组存进位)

 

再说数组和矩阵的题目

(1)简单的问题:stringbuffer,两个有序数组归并问题

(2)经典问题:topK,数组中出现次数超过一半的数字,2sum问题,prefixsum问题(数组累加和为特定值,和双指针区别,最大值的话就dp),快排partition,time range排序重叠区间问题

(3)bfs或dfs:最短通路

(3)涉及二分查找问题:行列排序的矩阵中查找(对角线二分或者右上角比较),旋转数组查找,两个有序数组合并后的中位数或kth数(难)

(4)涉及排序问题:外部排序,1~N数字排序,矩阵的topK,排序后相邻数最大差值(桶排序),数组配对(计数排序)

(4)涉及双指针问题:最长可整个子数组(子数组max-min=1),全正数数组sum为k的最长子数组

(5)DP问题:子数组最大累加和(延伸:子矩阵最打累加和),子数组的最大累积乘积

(6)其他:N*M图像旋转90度问题,矩阵行列清零,转圈(之字形)打印矩阵或者矩阵顺时针旋转90度(使用左上角右下角坐标做基准,递归),数位重组

 

标签:题目,问题,字符串,算法,数组,堆栈,排序,stack
From: https://blog.51cto.com/u_11908275/6387987

相关文章

  • 石子合并(GarsiaWachs算法)
    对于石子合并问题,有一个最好的算法,那就是GarsiaWachs算法。时间复杂度为O(n^2)。它的步骤如下:设序列是stone[],从左往右,找一个满足stone[k-1]<= stone[k+1]的k,找到后合并stone[k]和stone[k-1],再从当前位置开始向左找最大的j,使其满足stone[j]> stone[k]+stone[k-1],插到j的后面就......
  • python版本的“共轭梯度法”算法代码
    在看代码的过程中遇到了共轭梯度法这个概念,对这个算法的数学解释看过几遍,推导看过了,感觉懂了,然后过上一些日子就又忘记了,然后又看了一遍推导,然后过了一些日子也就又忘记了,最后想想这个算法的数学解释就不要再取深究了,毕竟平时也不太会用到,偶尔用到了只要保证代码会写也就OK了。 ......
  • 编辑字符串距离
    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183题意:编辑距离,又称Levenshtein距离(也叫做EditDistance),是指两个字串之间,由一个转成另   一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删   除一个字符......
  • UE4字符串调试日志
    #在运行时打印输出信息原作者:Rama(opensnewwindow)此文为Logs,PrintingMessagesToYourselfDuringRuntime(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。#概述Logs很重要,因为它通过给你反馈来让你知道:你的......
  • Lucene默认的打分算法——ES默认
    改变Lucene的打分模型随着ApacheLucene4.0版本在2012年的发布,这款伟大的全文检索工具包终于允许用户修改默认的基于TF/IDF原理的打分算法。LuceneAPI变得更加容易修改和扩展打分公式。但是,对于文档的打分计算,Lucene并只是允许用户在打分公式上修修补补,Lucene4.0推出了更多的打......
  • BFGS算法
    今天,我来讲一种在机器学习中常用到的优化算法,叫做BFGS算法。BFGS算法被认为是数值效果最好的拟牛顿法,并且具有全局收敛性和超线性收敛速度。那么接下来将会详细讲解。Contents   1.什么是拟牛顿法  2.拟牛顿法原理  3.DFP算法原理  4.BFGS算法原理  5.BFGS算......
  • Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable
    场景Java中基于JDK的LRU算法实现LRU算法-缓存淘汰算法-Leastrecentlyused,最近最少使用算法根据数据的历史访问记录来进行淘汰数据,其核心思想是:如果有数据最近被访问过,那么将来被访问的几率也更高在Java中可以利用LinkedHashMap容器简单实现LRU算法LinkedHashMap底层就是用......
  • 关于C++字符串的一些函数
    其实印象里,c的char用法反倒比c++的string深一点,可能是因为我对string的运用太少了吧。 提到C++的string,就得先提一下首先提一下C的char类型,毕竟C++是根据C延展过来的,继承了C的特性,而且C本身是没有string这个东西的。 char是什么?一个关键字,用于声明一个变量是字符类型。好吧,......
  • twitter僵尸网路检测,只能twitter自己做这种算法
     twitter僵尸网路检测数据样例 TwitterbotdetectorIntheprevioussections,wesawhowtobuildamachinelearning-basedbotnetdetector.Inthisnewproject,wearegoingtodealwithadifferentprobleminsteadofdefendingagainstbotnetmalware.Weareg......
  • 聚类算法:ISODATA算法 ——kmeans算法升级版,不知道k也可以,但是需要你自己指定其他参数
    当K值的大小不确定时,可以使用ISODATA算法。ISODATA的全称是迭代自组织数据分析法。在K均值算法中,聚类个数K的值需要预先人为地确定,并且在整个算法过程中无法更改。而当遇到高维度、海量的数据集时,人们往往很难准确地估计出K的大小。ISODATA算法就是针对这个问题进行了改进,它的思想......