剑指Offer刷题笔记
引言因为最近要找实习,行业形势还收紧,压力巨大,所以打算奋起刷题,暂时把剑指Offer第一部分的刷题感想放在这里。本文不给出标准答案,便于根据思路编写代码。(本人是菜鸡,希望有人指正错误,别再给菜狗上压力了)。
09题目很简洁,使用两个栈实现一个队列,两个方法,一个是向队列尾部添加元素,一个是从队列头部取出元素。
我自己的解答
我自己的方法是一个stack存储数据,另一个stack完全用来辅助,插入时插入进数据队列中,取出时将所有的数据栈中的取出并压入第二个stack中,最后拿到栈底元素,重新将所有的第二个stack中的元素取出并压入第一个stack
我自己的这个方法就是相当于每次都是把整个栈清空了一次并且重新写入,显然是效率非常低的方法
题解题解首先使用一个stack用来存储所有的数据,加入时直接压栈,取出时首先判断另一个stack是否为空,如果是空的将第一个stack中的所有元素取出 ...
LeetCode第39题分析
原题给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。
示例 1:
123456输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。7 也是一个候选, 7 = 7 。仅有这两种组合。
示例 2:
12输入: candidates = [2,3,5], target = 8输出: [[ ...
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)} ...
关于leetCode第34题引发的二分查找的思考
原题给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
示例 1:
12输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]
示例 2:
12输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]
示例 3:
12输入:nums = [], target = 0输出:[-1,-1]
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array著作权归领扣网络所有 ...
LeetCode刷题小记【一】(1~4)
序言本系列博客笔记都是本人在刷leetcode题目时受到的一些启发和学习笔记,本人习惯使用Java进行练习,所以我的答题都是使用Java进行的,源码已经在GitHub开源,点击跳转GitHub欢迎在评论区进行讨论,但是本人的刷题速度较慢且现阶段只考虑刷算法题目,请见谅。
第一题:两数之和原题给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
解答解法一分析这道题目基本上的算法相当固定,简单的就是遍历,只要遍历全部的数组就一定能找到符合条件的或者是知道无解。
代码123456789 ...