![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
joy_haha
这个作者很懒,什么都没留下…
展开
-
2020-10-03
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。# -*- coding:utf-8 -*-class Solution: def minNumberInRotateArray(rotateArray): if len(rotateArray)原创 2020-10-04 14:33:13 · 109 阅读 · 0 评论 -
2020-9-28 剑指 Offer 53 - I. 在排序数组中查找数字 I
在排序数组中查找一个数字出现的次数题目输入: nums = [5,7,7,8,8,10], target = 8输出: 2分析 :遍历的话很简单,但是时间复杂度O(n),题目看上去很简单,但是真正的降低时间复杂度也需要用到一些算法的知识。由有序数组可知,我们可以得到第一次出现这个数字与最后一次出现这个数字的索引,从而相减得到该数字出现的次数。容易忽略的点 :数组本身为空数组;数组不为空,但是并不包含目标数字;关于此题用二分查找的一点小trick:用两个条件判断即可。指针最好为right=m原创 2020-09-28 22:33:29 · 140 阅读 · 0 评论 -
滑动窗口最大值--双端队列(详细解读)2020-9-1
滑动窗口最大值–双端队列(详细解读)要分清头和尾,尾部添加,头部删除演绎维护单调双端队列的4个步骤一四个步骤的目的,保证滑动窗口头部是最大值(头,尾,尾,头)第一步,头部出队,清理超范围(头部出队只出一个元素)第二步,篮球队清理,移除尾部,在当前值前面的还小于当前值的元素第三步,尾部入队,尾部范围正确第四步,返回头部一一当前窗口最大值比如【1 3 -1 -3 5 3 6 7】先进入1,扫描3,发现3>1,然后1出队,3进队。-1<3,-1进队,最大值为3;-3<-1,原创 2020-09-01 11:40:28 · 362 阅读 · 0 评论 -
两数之和(lc1)2020-8-31
两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]知识点:。。。思路:很简单需要注意的点:最后返回一个空的vector,不然会报错;return vector();clas原创 2020-08-31 20:15:06 · 111 阅读 · 0 评论 -
反转字符串中的单词(lc557)2020-8-31
反转字符串中的单词给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”知识点:栈思路:只要没有遇到空格就把换个字符入栈,如果遇到空格后,判断一下是第几次遇到空格。如果是第一次遇到空格,这时候不需要加" ",因为这样反转回来的时候第一个字母前面会有一个空格。但是就算这样做了,但是依然有问题,因为最后一个字母会连起来倒数第二个,所以我们要原创 2020-08-31 20:10:11 · 118 阅读 · 0 评论 -
比较含退格的字符串(lc844)2020-8-31
比较含退格的字符串给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。知识点:栈思路:用一个函数来得到每个字符串实际上最后得到的字符串。然后对得到的字符串再进行比较。对于一个字符串,当字符不是#时,入栈;当字符是#时,出栈。最后将栈里的字符都pop出来组成字符串我现在好像意识到这样出来的字符串是反过来的,但是是比较两个一不一样,没影响需要注意的地方:注意出栈的时候,要保证栈不是空的。if(!stack.empty()){stack原创 2020-08-31 19:33:02 · 107 阅读 · 0 评论 -
删除最外层的括号(lc1021)2020-8-31
删除最外层的括号例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语,其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括号字符串原语。对 S 进行原语化分解,删除分解中每个原语字符串的最外层括,返回 S。知识点:好像也没用到啥知识点?可以用栈解决,但没有用思路:原创 2020-08-31 19:14:53 · 133 阅读 · 0 评论 -
删除排序数组中的重复项 (lc26) 2020/8/30
删除数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。知识点:快慢指针相似题目:移除某个元素代码思路:i为快指针,j为慢指针,直到碰上不重复的,把它紧接着存到nums[++j]里。需要注意的地方:(1)题目说了不需要考虑数组中超出新长度后面的元素。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做原创 2020-08-30 13:30:04 · 233 阅读 · 0 评论 -
有效的括号(lc20) 2020/8/29
有效的括号(lc20)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。知识点:栈 后进先出的特性思路:先判断括号是左括号还是右括号。如果为左括号的话则入栈,一旦遇到右括号,将栈中的栈顶出栈,然后判断此时的括号与出栈的元素是否恰为一对括号,如果不是则该组括号不是有效括号,返回false;若最后栈为空,则表明为有效的括号;需要注意的地方:(1)首括号为右括号的时候;(2)括号须为偶数个;(3)c++中的栈操作pop(),返回值为void; top()返原创 2020-08-29 23:55:24 · 112 阅读 · 0 评论 -
重学数据结构与算法
重学数据结构与算法一、 时间复杂度和空间复杂度二、优化代码的方法论三、数据结构基础四、如何完成线性表的增删查五、栈:后进先出的线性表,如何实现增删查?最近很迷茫,不知道应该学什么好了,似乎什么都需要去学,是的,作为一个跨专业狗,仅有用的一点知识就是一些对计算机的基本理解和一些编程入门知识。缺乏系统性的计算机知识的学习,代码能力渣渣,算法和数据结构也和没学过一样。更不要提计网操作系统编译原理了,本科不学,自己也没自学,不知道我怎样能混过毕业这一关。多说无益,最近对数据结构和算法很感兴趣,那就学习吧,行动起来原创 2020-07-30 15:58:45 · 284 阅读 · 0 评论