leetcode
vandance
这个作者很懒,什么都没留下…
展开
-
Leetcode Problem104
Maximum Depth of Binary Tree问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。问题解决:我们可以想象,对于一个节点指针,如果他为空,那么表示不存在,那么该节点的深度为0,如果该节点存在,但是不存在左右孩子,那么该节点的深度为1,如果是其他情况,那么我们只要再计算它左右孩子的深度即可,这样很明显可以利用递归来求出左右孩子...原创 2018-09-28 22:06:26 · 118 阅读 · 0 评论 -
Leetcode Problem112
Path Sum问题描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。问题解决:这道题跟上一道有异曲同工之妙,都是要找出从根节点到叶子节点的路径,只不过前一道题是为了找出所有路径中的最小值,这一道题是要找到某条路径上所有节点值相加等于目标和。class Solution {public: bool hasPathSum(...原创 2018-09-17 18:54:59 · 181 阅读 · 0 评论 -
Leetcode Problem53
Maximum Subarray问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。问题解决:假设cur为数组中以a[i-1]结尾的当前最大字段和,sum为数组中已知的最大字段和,当搜索到数组中最后一个元素时,便可以知道数组的最大字段和。这也是典型的动态规划问题。动态规划的主要思想就是把大问题划分为小问题,通过求解小问题来逐渐...原创 2018-09-10 17:07:14 · 96 阅读 · 0 评论 -
Leetcode Problem111
Minimum Depth of Binary Tree问题描述:给定一个二叉树,找出其最小深度。其中最小深度是从根节点到最近叶子节点的最短路径上的节点数量。问题解决:起初我想的是将求树的深度的max改成min就可以解决了,结果不是,因为如果存在一个节点只有一个子节点的话,返回结果就错误了,因为此时的“最小值”不是从根节点到叶子节点的深度。所以后来我想的是找出从根节点到每个叶子节点的路径长...原创 2018-09-17 17:04:58 · 199 阅读 · 0 评论 -
Leetcode Problem110
Balanced Binary Tree问题描述:给定一个二叉树,判断它是否是平衡二叉树。问题解决:平衡二叉树的定义是对于一棵二叉树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个定义的描述很容易联想到递归。class Solution {public: bool isBalanced(TreeNode* root) { ...原创 2018-09-17 16:20:29 · 102 阅读 · 0 评论 -
Leetcode Problem107
Binary Tree Level Order Traversal II问题描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 3 / \9 20 / \ 15 7返回:[ [15,7], [9,20], [3] ]问题解决:层次遍历问题一般都可...原创 2018-09-17 16:04:14 · 112 阅读 · 0 评论 -
Leetcode Problem100
Same Tree问题描述:判断两颗二叉树是否是相同的树,即树的结构必须一致,对应节点的值相同。问题解决:一般来说树的问题用递归很容易解决,我们同时遍历两棵树,从两棵树的根节点开始,若当前节点有一个为空,那么两棵树的结构不一致,不是相同的树,如果两个节点不为空且两个节点的值不一样,那也不是相同的树,如果两个节点均为空,代表它们的父节点为叶子节点,往上回溯,如果两个节点不为空且节点的值相同,...原创 2018-09-17 14:32:35 · 108 阅读 · 0 评论 -
Leetcode Problem198
House Robber问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。问题解决:这种题一开始还是想用递归来做,设置一个函数which(nums...原创 2018-09-12 20:31:38 · 113 阅读 · 0 评论 -
Leetcode Problem139
Word Break问题描述:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。拆分时可以重复使用字典中的单词,并假设字典中没有重复的单词。问题解决:一开始我打算用BFS来做,先找出字典中的第一个能够与字符串s的子串匹配的单词,然后用递归继续找出剩余字串与字典的匹配串,但是这样有一个问题就是如果有多个匹配然后...原创 2018-09-09 16:20:54 · 142 阅读 · 0 评论 -
Leetcode Problem86
Partition List问题描述:给定一个链表和一个数x,对其进行分区,使得小于x的所有节点都在大于或等于x的节点之前。问题解决:这道题耗费了我一个半小时的时间。(好惨!!!)原来的思路是将小于x的节点组成一个链表,最后再拼接上剩余的节点,但是居然x可以不存在链表中,然后就一直过不了。后来看了网上别人的解法才知道怎么解决。首先设置一个辅助节点放在头节点前面(这一步很关键),然后找到第一...原创 2018-09-03 21:17:59 · 99 阅读 · 0 评论 -
Leetcode Problem121
Best Time to Buy and Sell Stock问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。问题解决:暴力搜索,找出最大利润。class Solution {public: int maxProfit...原创 2018-09-10 19:09:31 · 115 阅读 · 0 评论 -
Leetcode Problem226
Invert Binary Tree问题描述:翻转一棵二叉树。exampleinput:4/ 2 7/ \ / 1 3 6 9output:4/ 7 2/ \ / 9 6 3 1问题解决:将每个节点的左右子树翻转即可,如果遇到叶子节点,则直接返回该节点。class Solution {public: Tree...原创 2018-09-18 22:10:05 · 105 阅读 · 0 评论 -
Leetcode Problem404
Sum of Left Leaves问题描述:计算给定二叉树的所有左叶子之和。问题解决:题目描述得十分简洁明了,要计算所有左叶子的和,即满足该节点是左孩子并且还是叶子节点。很明显这道题还是二叉树的遍历问题,只要我们找到满足是左孩子且是叶子节点的所有节点之和就可以了。class Solution {public: int sumOfLeftLeaves(TreeNode* root)...原创 2018-09-28 21:53:17 · 114 阅读 · 0 评论 -
Leetcode Problem221
Maximal Square问题描述:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。比如说在下面的二维矩阵中, 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0只包含1的最大正方形的面积为2*2=4。问题解决:正方形的面积等于边长的平方,所以找到最大的正方形意味着其边长也是最大的。在这里我们可以认为一个1也是一个...原创 2018-09-26 20:11:07 · 144 阅读 · 0 评论 -
Leetcode Problem108
Convert Sorted Array to Binary Search Tree问题描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。问题解决:题目要求是要将一个按照升序排列的有序数组转换为一棵高度平衡的二叉搜索树,二叉搜索树我们知道,就是节点的值小于其右子树节点的值而大于其左子树节点的值,平衡则为该树的任意节点左右子树的高度差不超过一。因为数组已经是按照升序排列好了的,所...原创 2018-09-26 17:36:12 · 236 阅读 · 0 评论 -
Leetcode Problem746
Min Cost Climbing Stairs问题描述:数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。example 1Input...原创 2018-09-15 11:24:41 · 118 阅读 · 0 评论 -
Leetcode Problem303
Range Sum Query - Immutable问题描述:给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。问题解决:这本身是一道很容易的问题,就只是用一个for循环就能解决的问题。但是其实题目还要求我们初始化这个类,如果按照原来的数组储存起来,再去计算 i 到 j 范围内元素的总和,就有点浪费时间了。其实,我们在存...原创 2018-09-14 16:48:04 · 160 阅读 · 0 评论 -
Leetcode Problem235
Lowest Common Ancestor of a Binary Search Tree问题描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”问题解决:这道题我的想法是这样的,先找出一个节点的所有祖...原创 2018-09-19 17:56:35 · 379 阅读 · 0 评论 -
Leetcode Problem257
Binary Tree Paths问题描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。问题解决:这个问题其实也是一个非常简单的问题,我在这里新写了一个函数path(root, str)。其中root为当前节点,str为根节点到当前节点的路径上的值,当遍历到叶子节点时,就可以储存起来了,如果不是叶子节点,那么继续往下一层进行操作。值得注意的是,结果的格式要求是类似"1->2->...原创 2018-09-18 23:22:54 · 115 阅读 · 0 评论 -
Leetcode Problem43
Multiply Strings问题描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。问题解决:首先我想到的是用最基本的方法来做,即像人工做算术题一样。比如说25*25,那我们首先计算25*5,将得到的值存储在tmp里面(如果该值大于等于10,则保留其个位数,进位由jw来保存)。res在相应的位置上加上tm...原创 2018-09-13 18:20:15 · 114 阅读 · 0 评论 -
Leetcode Problem101
Symmetric Tree问题描述:给定一个二叉树,检查它是否是镜像对称的。问题解决:我的想法是这样的,分别用两个指针指向根节点,假设这两个指针为p和q,然后每一次比较p的左子树和q的右子树,p的右子树和q的左子树,这是递归的部分,边界条件则为叶子节点。class Solution {public: bool isSymmetric(TreeNode* root) { ...原创 2018-09-18 22:33:47 · 192 阅读 · 0 评论 -
Leetcode Problem563
Binary Tree Tilt问题描述:给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的节点之和和右子树节点之和的差的绝对值。空节点的坡度是0。整个树的坡度就是其所有节点的坡度之和。问题解决:问题所要求的是整个树所有节点的坡度之和,而坡度等于节点左子树的节点之和右子树节点之和的差的绝对值,所以我们要必须计算出所有节点的坡度。这种二叉树问题很...原创 2018-09-05 20:41:59 · 115 阅读 · 0 评论 -
Leetcode Problem55
Jump Game问题描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。example1:Input: [2,3,1,1,4]Output: trueExplanation: Jump 1 step from index 0 to 1, then 3 steps to the last i...原创 2018-09-11 21:19:34 · 101 阅读 · 0 评论 -
Leetcode Problem19
Remove Nth Node From End of List问题描述:给出一个链表,要求删掉倒数第n个节点。(n肯定是一个有效的数字)由于题目已经给出n是一个有效的数字,所以我们不用去判定n是否小于0或者大于链表的长度,因此我们可以通过遍历一次链表来得到结果。首先设置两个指针p和q,p指向链表头部,q为p后第n-1个节点。接着p,q指针同时往下接着走直到q->next为空,此时的...原创 2018-08-22 20:29:46 · 91 阅读 · 0 评论 -
Leetcode Problem22
Generate Parentheses问题描述:给定n对括号,要求能够生成格式正确的括号的所有组合。 例如给定n=3,那么结果应该是:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]这道题依旧可以用DFS来做。想象一棵二叉树,我们知道这个括号组合的第一个肯定是“(”,因此将他设为根节点,...原创 2018-08-26 20:40:14 · 94 阅读 · 0 评论 -
Leetcode Problem16
3Sum Closest问题描述:给定任意一个数组和一个目标值target,要求从数组中找到三个数使得这三个数的和最接近target。这道问题是上一道问题(3Sum)的衍生问题,要找到最接近target的三个数的和(假设为sum),我们定义一个res等于target与sum的差的绝对值,找到res的最小值即可。跟上一题一样,我们还是先将数组进行从小到大排列,然后固定住第一个数字,用两个指针...原创 2018-08-18 20:24:10 · 93 阅读 · 0 评论 -
Leetcode Problem15
3Sum问题描述:任意给一个数组,在数组中找到三元组(a,b,c)使得a+b+c=0。如果某符合要求的三元组有重复多个,也只取一个,要求找到所有的三元组。一开始自己想了一个暴力搜索的方法,结果超时了,然后想一层一层剪枝,还是不行。最后看了一下别人的思路,用了双指针解决了问题。在我原来的思路里,我是将数组进行排序,然后固定两个数字,然后找到符合要求的第三个数字。现在就只固定住一个数字,然...原创 2018-08-13 20:54:42 · 141 阅读 · 0 评论 -
Leetcode Problem11
Container With Most Water问题是给出一个数组如[1,8,6,2,5,4,8,3,7],代表坐标(i,a i)处的点,找到两条线,它们与x轴一起形成一个容器,得到最大容量。这个问题很简单的想法就是便利一遍数组,得到最大容量,不过这样的话时间复杂度将达到O(n^2)。另外一种想法是设置指向数组头尾两个指针left和right,比较这两个指针指向的数的大小,若left...原创 2018-08-08 21:05:36 · 97 阅读 · 0 评论 -
Leetcode Problem14
Longest Common Prefix找出字符串的最长公共前缀。这个问题其实只要通过比较某一个字符串与其他字符串最长的共同前缀即可,很简单。注意当strs为空的情况。string longestCommonPrefix(vector<string>& strs) { string tmp=""; if (strs.size() == 0) retur...原创 2018-08-12 20:50:07 · 89 阅读 · 0 评论 -
Leetcode Problem13
Roman to Integer问题是将罗马数字转化为阿拉伯数字。该问题是问题12的逆过程,解决思路也很简单。我们可以发现,I、X和C这三个数字会比较特殊,他们如果在其他数字组合可以表示为别的数,例如IV = 4,IX = 9。这种特殊的情况我们可以看成是IV = V - I = 5 - 1 =4,IX = X - I =10 - 1 = 9。这样的话I、X和C就还是表示为原来的值,只是符号变...原创 2018-08-12 20:02:59 · 84 阅读 · 0 评论 -
Leetcode Problem9
**Palindrome Number** 回文数问题。本题要求不能使用string来转换。但其实我一开始想的是用取余的方法来求取每个位的数字,通过数组储存起来,然后再比较数组对应位置的数字看是否相同即可。在别的博客上看到了另外一种解法,就是求出该数字的反转数,看两个数是否相等。bool isPalindrome(int x){ if(x<0) ...原创 2018-08-07 19:05:03 · 103 阅读 · 0 评论 -
Leetcode Problem8
String to Integer (atoi)题目要求将string转换为数字(包括正负数,也就是说可以带正负号),如果该数字前含有除空格外的其他字符,则默认为0。而且数字一旦超过int型可以表示的范围,则取int可以表示的最大值/最小值。本题目的话只要注意一些条件即可:非法字符,空格。解法:一开始我们要跳过字符串前面的空格,遇到不是空格即停下。判断该位置是否是正负号,如果不是则为0...原创 2018-08-06 20:15:56 · 113 阅读 · 0 评论 -
Leetcode Problem17
Letter Combinations of a Phone Number问题描述:给定包含来自包含数字的字符串2-9,返回该数字可能表示的所有可能的字母组合,下面给出了数字和字母的映射及相应的例子。 输入: “23”输出: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]这道题一开始我也想不出要用什么方法做,然后就去查找Di...原创 2018-08-20 12:14:13 · 140 阅读 · 0 评论 -
Leetcode Problem26
Remove Duplicates from Sorted Array问题描述:从有序数组中删除重复元素并返回新数组的长度。问题解决:从数组的第二个元素开始,与前面元素进行比较,如果相同则删除,如果不同则从下个元素开始比较。class Solution {public: int removeDuplicates(vector<int>& nums) {...原创 2018-08-30 20:03:06 · 97 阅读 · 0 评论 -
Leetcode Problem122
Best Time to Buy and Sell Stock II问题描述:这一题跟上一道题Best Time to Buy and Sell Stock很像,只是这道题允许多次买卖股票,但值得注意的是,你不能同时参与多笔交易,即必须在再次购买前出售掉之前的股票。example1:Input: [7,1,5,3,6,4]Output: 7Explanation: Buy o...原创 2018-09-11 20:17:53 · 126 阅读 · 0 评论 -
Leetcode Problem147
Insertion Sort List问题描述:使用插入排序对链表进行排序。 问题解决:简单的插入排序方法。class Solution {public: ListNode* insertionSortList(ListNode* head) { ListNode *add=new ListNode(0); add->next=he...原创 2018-09-04 20:26:02 · 130 阅读 · 0 评论 -
Leetcode Problem143
Reorder List问题描述:给定单链表L:L 0 → L 1 →…→ L n -1 → L n,将其重新排序为:L 0 → L n → L 1 → L n -1 → L 2 → L n -2 →…问题解决:思路很简单,用一个栈将所有节点储存起来,并记录链表的长度n。然后将pop栈顶,放在L0后面,以此类推,总共做了n/2次(即前半部分与后半部分)。但是这样跑出来的结果TLE。看到了别...原创 2018-09-04 13:23:31 · 145 阅读 · 0 评论 -
Leetcode Problem21
Merge Two Sorted Lists问题描述:以从小到大的顺序合并两个排好序的链表,并且题目要求新链表应该通过拼接前两个链表的节点来完成。解题思路:首先先考虑特殊情况,如果两个链表中的一个为空,那么直接返回另外一个不为空的链表,接下来考虑均不为空的情况,先比较两个链表头部的值的大小,那个比较小的节点作为新链表的头部,设置指针p指向该链表的下一节点,设置指针q指向另外一个链表的头节点...原创 2018-08-24 19:41:46 · 111 阅读 · 0 评论 -
Leetcode Problem24
Swap Nodes in Pairs问题描述:给定一个链表,将每两个相邻的节点交换位置,返回新的链表。这道题其实就是节点之间的交换问题,要注意保持链表的连续性,实现起来并不是很难。 ListNode* swapPairs(ListNode* head) { if(head==NULL||head->next==NULL) return head; ...原创 2018-08-28 20:51:00 · 122 阅读 · 0 评论 -
Leetcode Problem20
Valid Parentheses问题描述:典型的括号匹配问题。解决思路很简单,用一个栈来储存符号。具体操作如下:从头到尾遍历字符串,如果遇到左括号如( 、{ 、[ 就将其压入栈中,如果遇到右括号如)、}、] ,首先判断栈是否为空,如果为空则不匹配,如果不为空,将栈顶元素pop出来,并与当前符号比较,如果匹配则继续下去,如果不匹配则结束。 bool isValid(str...原创 2018-08-23 20:46:11 · 108 阅读 · 0 评论