
死磕算法
文章平均质量分 59
_忽如远行客
人一能之,已百之;人十能之,己千之.果能此道矣,虽愚必明,虽柔必强。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【死磕算法之1刷Leetcode】——找出两个有序数组的中位数【Median of Two Sorted Arrays】O(log(m+n))
Median of Two Sorted Arrays 题目标签:hard 题目要求: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should b...原创 2018-12-05 20:39:26 · 322 阅读 · 0 评论 -
【死磕算法·栈和队列】双栈排序问题
题目要求:一个栈中元素类型为整型,现在想将该栈自顶到底从大到小排序(vector中第一个元素为栈顶),只能申请一个栈,除此之外可以申请新的变量,但不能申请额外的数据结构,如何完成排序? 思路:记原来的栈为stack,申请的辅助栈为help,设置help自顶到底从小到大排序,即可将help倒入stack中,实现stack自顶到底从大到小排序。 从stack中弹出栈顶元素,记为current。 ...原创 2018-12-16 21:03:42 · 184 阅读 · 0 评论 -
【死磕算法·栈和队列】仅用递归实现栈的逆序
题目要求:实现栈的逆序,但只能用递归函数和这个栈本身操作来实现,不能自己申请额外的数据结构。 题目思路: 实现两个递归函数: getBottomItem():移除栈底元素并返回该元素 reverse():实现整个栈逆序 如何写递归函数? 递归函数在函数体中调用自己,对不同的值进行重复操作。 递归函数三要素: 1、要有可以退出函数的情况; 2、递归过程中将一个问题简化到更小...原创 2018-12-16 20:05:27 · 250 阅读 · 0 评论 -
【死磕算法·栈与队列】如何用双栈实现队列操作?
题目要求: 编写一个类,只能用两个栈结构实现队列,支持队列的基本操作add(),poll(),peek() 题目思路: 栈是先进后出,队列是先进先出。用两个栈可以将顺序反过来,实现队列操作 设置两个栈stackPush(压入栈)和stackPop(弹出栈),一个只进行push操作,一个只进行pop操作。 将stackPush中的值都倒入到stackPop中,再从stackPop中弹出就是...原创 2018-12-17 15:01:02 · 150 阅读 · 0 评论 -
【死磕算法·栈和队列】如何实时查询栈中最小值
题目大意:实现一个特殊的栈,在实现栈的基本功能的基础上,实现返回栈中最小元素的操作getmin() 要求:设计的栈类型可以使用现成的栈结构,其中 pop()、push()、getMin()操作的时间复杂度为O(1) 题目思路(涉及到栈操作): 方法一: 1、设置两个同步操作的栈 stackData,stackMin。stackData进行正常栈操作,stackMin存储每一步操作后的最小值...原创 2018-12-16 15:45:47 · 256 阅读 · 0 评论 -
【死磕算法·字符串问题】最长无重复子串问题
题目大意: 给定一个字符串str,求该字符串中的最长无重复子串的长度。 如“abcd”的最长无重复子串是“abcd”,长度为4;“abcb”的最长无重复子串是“abc”,长度为3。 题目思路: 遍历字符串,表示出以每个字符串元素str[i]为结尾的最长无重复子串长度,遍历完成后求最大值即可。 如何求以str[i]为结尾的最长无重复子串长度呢? 1、得到以str[i-1]为结尾的最长...原创 2018-12-16 09:58:44 · 476 阅读 · 0 评论 -
【死磕算法·字符串问题】字符串括号匹配问题
题目大意: 给定一个字符串,判定字符串是否是括号的有效组合。 如“(())”返回true;“)))((("返回false; 思路: 1、维护变量num,表示当前已经遍历的部分字符串中‘(’和')'数量的差值 2、遍历遇到左括号,num++; 3、遍历遇到右括号,num--; 4、在遍历过程中,如果num<0,说明当前右括号的个数超过了左括号的个数,返回false 5、遍历完成...原创 2018-12-16 10:56:59 · 573 阅读 · 0 评论 -
【死磕算法·字符串问题】空格替换
题目大意: 给定字符串str,将字符串内所有空格更换为“%20”。假设str后面有足够的空间容纳替换后的字符串。 思路: 1、遍历字符串得到空格个数n,进而得到替换后的字符串长度。如原字符串长度为l,替换后的字符串长度为l+2*n 2、替换后的字符串最后一个索引是l+2*n-1,从右往左赋值新字符串。 如 class Replacement { public: strin...原创 2018-12-16 10:23:19 · 158 阅读 · 0 评论 -
【死磕算法·字符串问题】字符串拼接结果最小字典序问题
题目大意: 给定字符串类型数组strs,找出一种拼接顺序来拼接str中的字符串,使得最终生成的大字符串字典序最小,并返回该大字符串。 如"ba”、“b”可以拼接为“bba”和“bab”,两者相比“bab”字典序更小,因此返回“bab” 题目思路: 这道题目实质上是一种排序问题。 以下是备选的几种方案: 1、给出所有可能的拼接方式,遍历求最小。太暴力了 ...不约不约,时间复杂度为O(...原创 2018-12-15 14:32:28 · 743 阅读 · 0 评论 -
【死磕算法·字符串问题】字符串移动问题
题目大意: 给定一个字符串str和整数i,i代表str中的位置,将str[0,...i]移到str的右侧,str[i+1,...length-1]移动到str的左侧。 如“ABCDE”,i =2,变化结果为“DEABC” 要求:时间复杂度为O(N),空间复杂度为O(1) 之前一篇博客提到如何判断字符串str2是字符串str1的旋转字符串。本题也可以采用将str拼接之后,按照i取子串的方法,...原创 2018-12-15 11:39:49 · 791 阅读 · 0 评论 -
【死磕算法·字符串问题】字符串单词间逆序
题目大意: 给定字符串表示的句子,在单词间做逆序调整。单词内部字符次序不变。 如“cat loves dog” 变化结果为“dog loves cat” 思路: 1、实现字符串内部任意区间内所有字符逆序的函数f 2、用f处理整个字符串为“god sevol tac” 3、找到逆序大字符串中每一个单词的区域,通过f对每一个单词逆序处理为“dog loves cat” 代码实现: cl...原创 2018-12-15 11:36:52 · 680 阅读 · 0 评论 -
【死磕算法】旋转字符串判断·kmp算法应用
旋转字符串: 某字符串str1的前面任意几个连续字符移动到str1字符串的后面,形成新的字符串str2,str2即为str1的旋转字符串。 如“1234”的旋转字符串有“1234”、“2341”、“3412”、“4123”。现给定两个字符串str1,str2,判断str2是str1的旋转字符串。 思路: 1、首先判断str1和str2的字符串长度是否相等,若不等,返回false;若相等,继...原创 2018-12-15 15:01:32 · 232 阅读 · 0 评论 -
【死磕算法之1刷leetcode】954. Array of Doubled Pairs
题目是周赛的第二题,难度中等。 题目描述: Given an array of integers A with even length, return true if and only if it is possible to reorder it such that A[2 * i + 1] = 2 * A[2 * i] for every 0 <= i < len(A) / 2. ...原创 2018-12-09 16:03:05 · 367 阅读 · 0 评论 -
【死磕算法之1刷leetcode】——324 Wiggle Sort摆动序列2
题目描述 Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]… Example: Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possible answer is [1, 4, 1, 5,...原创 2018-12-06 18:08:52 · 253 阅读 · 0 评论 -
【死磕算法之1刷leetcode】——376 Wiggle Sort摆动序列
题目描述: Given an unsorted array nums, reorder it in-place such that nums[0] &lt;= nums[1] &gt;= nums[2] &lt;= nums[3]… Example: Given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4]...原创 2018-12-06 12:17:51 · 186 阅读 · 0 评论 -
【死磕算法·栈和队列】用双端队列求解滑动窗口问题
题目要求: 有一个整型数组 arr 和一个大小为 w 的窗口,从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口[4,3,3]...原创 2018-12-17 13:07:30 · 444 阅读 · 0 评论