剑指Offer刷题笔记
引言因为最近要找实习,行业形势还收紧,压力巨大,所以打算奋起刷题,暂时把剑指Offer第一部分的刷题感想放在这里。本文不给出标准答案,便于根据思路编写代码。(本人是菜鸡,希望有人指正错误,别再给菜狗上压力了)。
09题目很简洁,使用两个栈实现一个队列,两个方法,一个是向队列尾部添加元素,一个是从队列头部取出元素。
我自己的解答
我自己的方法是一个stack存储数据,另一个stack完全用来辅助,插入时插入进数据队列中,取出时将所有的数据栈中的取出并压入第二个stack中,最后拿到栈底元素,重新将所有的第二个stack中的元素取出并压入第一个stack
我自己的这个方法就是相当于每次都是把整个栈清空了一次并且重新写入,显然是效率非常低的方法
题解题解首先使用一个stack用来存储所有的数据,加入时直接压栈,取出时首先判断另一个stack是否为空,如果是空的将第一个stack中的所有元素取出 ...
LeetCode第32题动归思路
引言这是一道LeetCode题目,用来对之前的一篇动态规划的文章进行进一步的实践说明
原题给你一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
123输入:s = "(()"输出:2解释:最长有效括号子串是 "()"
示例 2:
123输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"
示例 3:
12输入:s = ""输出:0
提示:
0 <= s.length <= 3 * 104
s[i] 为 ‘(‘ 或 ‘)’
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-valid-parentheses著作权归领扣网络所有。商业转载 ...
动态规划学习笔记
引言其实在一定的条件下贪心算法就可以解决问题,比如凑钱到指定面额的问题。以最熟悉的人民币作为背景,如何用(1,5,10,20,50,100)五种面额的钱币凑出指定数额的钱同时钱数量要尽可能的少,这是我们只需要贪心算法就能解决问题。但是如果有一个很奇怪的国家的发行货币是1,5,11,并且你需要找出面值15的组合,这样贪心算法给出的答案是11+1+1+1+1而我们很轻易的就能发现只要5+5+5就能解决问题。这是因为贪心算法只考虑了眼前最优的情况,并没有给出全局最优解。
递归的问题及改进思路在这个问题中不难发现,可以问题分解。如最后需要15那么如果最后一枚拿的是11就需要凑4,如果最后一枚拿的是5就需要凑10,如果最后一枚拿的是1就需要凑14,文字表述可能有点绕,公式如下(f(x)表示凑x需要多少枚钱币)
1f(x) = min{f(x-1),f(x-5),f(x-11)} ...