![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
vandance
这个作者很懒,什么都没留下…
展开
-
double型比较大小
对于两个double类型的数,我们一般不直接比较他们的大小,因为计算机在表示小数时都有误差,我们一般认为偏差在一个较小的范围内则两个数据是相等的。 一般我们是这样做的:通过设定一个允许的误差值,对待判断是否相等的两个double类型数据做差求绝对值再和允许的误差做比较来判断是否相等。...原创 2018-11-03 16:38:36 · 4419 阅读 · 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 · 367 阅读 · 0 评论 -
Leetcode Problem257
Binary Tree Paths问题描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。问题解决:这个问题其实也是一个非常简单的问题,我在这里新写了一个函数path(root, str)。其中root为当前节点,str为根节点到当前节点的路径上的值,当遍历到叶子节点时,就可以储存起来了,如果不是叶子节点,那么继续往下一层进行操作。值得注意的是,结果的格式要求是类似"1->2->...原创 2018-09-18 23:22:54 · 99 阅读 · 0 评论 -
Leetcode Problem43
Multiply Strings问题描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。问题解决:首先我想到的是用最基本的方法来做,即像人工做算术题一样。比如说25*25,那我们首先计算25*5,将得到的值存储在tmp里面(如果该值大于等于10,则保留其个位数,进位由jw来保存)。res在相应的位置上加上tm...原创 2018-09-13 18:20:15 · 98 阅读 · 0 评论 -
Leetcode Problem101
Symmetric Tree问题描述:给定一个二叉树,检查它是否是镜像对称的。问题解决:我的想法是这样的,分别用两个指针指向根节点,假设这两个指针为p和q,然后每一次比较p的左子树和q的右子树,p的右子树和q的左子树,这是递归的部分,边界条件则为叶子节点。class Solution {public: bool isSymmetric(TreeNode* root) { ...原创 2018-09-18 22:33:47 · 174 阅读 · 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 · 94 阅读 · 0 评论 -
Leetcode Problem121
Best Time to Buy and Sell Stock问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。问题解决:暴力搜索,找出最大利润。class Solution {public: int maxProfit...原创 2018-09-10 19:09:31 · 101 阅读 · 0 评论 -
Leetcode Problem112
Path Sum问题描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。问题解决:这道题跟上一道有异曲同工之妙,都是要找出从根节点到叶子节点的路径,只不过前一道题是为了找出所有路径中的最小值,这一道题是要找到某条路径上所有节点值相加等于目标和。class Solution {public: bool hasPathSum(...原创 2018-09-17 18:54:59 · 135 阅读 · 0 评论 -
Leetcode Problem12
Integer to Roman阿拉伯数字转罗马数字的问题,其实解法很简单。我们现在已知的数有1,5,10,50,100,500和1000,而且题目中还告诉我们凡是4和9的数字都比较特殊,题目限制数字范围是1-3999,所以我们还可以知道4,9,40,90,400,900这几个比较特殊的数字。然后我们将该数字逐一减去其可以减的最大的数字(在已知的罗马数字中搜索),直到为零,将所有减去的罗马数字...原创 2018-08-10 17:02:13 · 118 阅读 · 0 评论 -
Leetcode Problem15
3Sum问题描述:任意给一个数组,在数组中找到三元组(a,b,c)使得a+b+c=0。如果某符合要求的三元组有重复多个,也只取一个,要求找到所有的三元组。一开始自己想了一个暴力搜索的方法,结果超时了,然后想一层一层剪枝,还是不行。最后看了一下别人的思路,用了双指针解决了问题。在我原来的思路里,我是将数组进行排序,然后固定两个数字,然后找到符合要求的第三个数字。现在就只固定住一个数字,然...原创 2018-08-13 20:54:42 · 128 阅读 · 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 · 75 阅读 · 0 评论 -
Leetcode Problem303
Range Sum Query - Immutable问题描述:给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。问题解决:这本身是一道很容易的问题,就只是用一个for循环就能解决的问题。但是其实题目还要求我们初始化这个类,如果按照原来的数组储存起来,再去计算 i 到 j 范围内元素的总和,就有点浪费时间了。其实,我们在存...原创 2018-09-14 16:48:04 · 148 阅读 · 0 评论 -
Leetcode Problem746
Min Cost Climbing Stairs问题描述:数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。example 1Input...原创 2018-09-15 11:24:41 · 105 阅读 · 0 评论 -
输出矩阵连乘所有的完全加括号形式
例如说,有四个矩阵ABCD相乘,那么所有的完全加括号结果为(A((BC)D)) (A(B(CD))) ((AB)(CD)) (((AB)C)D) (A(BC))D)。要求输出n个矩阵连乘所有的完全加括号结果。解决方法一基本思想:首先从1,2,3,4个矩阵的角度来归纳。如果只有一个矩阵A,那么很明显所有的完全加括号结果就是A本身。如果有两个矩阵A,B相乘,很明显所有的完全加括号结果就是AB。...原创 2018-10-15 21:15:49 · 5701 阅读 · 1 评论 -
矩阵连乘问题
一.定义完全加括号的矩阵连乘积可递归定义为:(1) 单个矩阵是完全加括号的;(2) 矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)例如,有四个矩阵ABCD相乘,那么所有的完全加括号结果为(A((BC)D)) (A(B(CD))) ((AB)(CD)) (((AB)C)D) (A(BC))D)如果一个矩阵的连乘...原创 2018-10-15 20:44:42 · 1968 阅读 · 0 评论 -
大整数乘法
设计一个有效的算法,可以计算两个n位大整数的乘法运算。如果按照我们日常的计算方法,应该就是将两个数逐位相乘,最后加起来得到最终的结果。由于是大整数乘法,那么我们用string来存储这两个数,因为是要做乘法,我们要从两个数的最低位开始乘,并且难免会有进位,所以我们打算翻转这两个string,使得更好操作一下。string multiply(string num1,string num2){ ...原创 2018-09-29 15:00:48 · 14120 阅读 · 1 评论 -
Leetcode Problem104
Maximum Depth of Binary Tree问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。问题解决:我们可以想象,对于一个节点指针,如果他为空,那么表示不存在,那么该节点的深度为0,如果该节点存在,但是不存在左右孩子,那么该节点的深度为1,如果是其他情况,那么我们只要再计算它左右孩子的深度即可,这样很明显可以利用递归来求出左右孩子...原创 2018-09-28 22:06:26 · 102 阅读 · 0 评论 -
Leetcode Problem404
Sum of Left Leaves问题描述:计算给定二叉树的所有左叶子之和。问题解决:题目描述得十分简洁明了,要计算所有左叶子的和,即满足该节点是左孩子并且还是叶子节点。很明显这道题还是二叉树的遍历问题,只要我们找到满足是左孩子且是叶子节点的所有节点之和就可以了。class Solution {public: int sumOfLeftLeaves(TreeNode* root)...原创 2018-09-28 21:53:17 · 98 阅读 · 0 评论 -
线性时间选择
问题:给定线性序集中n个元素和一个整数k,1<=k<=n,要求找出这n个元素中第k小的元素。我们采用快速排序的思想来解决这个问题。首先我们要找到基准的位置,如果基准的位置小于k,则表示第k小的元素在基准的后面,否则在基准的前面。如果能在线性时间内找到一个划分基准,使得按这个基准所划分出的2个子数组的长度都至少为原数组长度的 ε 倍(0<ε<1是某个常数),那么就可以在最...原创 2018-09-28 11:49:55 · 3627 阅读 · 1 评论 -
排序算法
学过数据结构的都知道,排序有内部排序和外部排序之分,本文我们主要关注的是内部排序算法。常见的排序算法如下图所示:排序算法可以分成以下几种:交换排序、插入排序、选择排序和归并排序。其中,冒泡排序和快速排序属于交换排序,插入排序和希尔排序属于插入排序,简单选择排序和堆排序属于选择排序,二路归并排序和多路归并排序属于归并排序。本文主要介绍这几种方法及其实现。冒泡排序冒泡排序(Bubble So...原创 2018-09-27 15:21:45 · 189 阅读 · 0 评论 -
二分搜索技术
二分搜索技术给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。分析:该问题的规模缩小到一定程度就可以容易地解决。而且该问题满足分治法的适用条件:该问题可以分解为若干个规模较小的相同问题;分解出的子问题的解可以合并为原问题的解;分解出的各个子问题是相互独立的。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素...原创 2018-09-26 21:12:06 · 1176 阅读 · 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 · 129 阅读 · 0 评论 -
Leetcode Problem108
Convert Sorted Array to Binary Search Tree问题描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。问题解决:题目要求是要将一个按照升序排列的有序数组转换为一棵高度平衡的二叉搜索树,二叉搜索树我们知道,就是节点的值小于其右子树节点的值而大于其左子树节点的值,平衡则为该树的任意节点左右子树的高度差不超过一。因为数组已经是按照升序排列好了的,所...原创 2018-09-26 17:36:12 · 217 阅读 · 0 评论 -
Leetcode Problem53
Maximum Subarray问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。问题解决:假设cur为数组中以a[i-1]结尾的当前最大字段和,sum为数组中已知的最大字段和,当搜索到数组中最后一个元素时,便可以知道数组的最大字段和。这也是典型的动态规划问题。动态规划的主要思想就是把大问题划分为小问题,通过求解小问题来逐渐...原创 2018-09-10 17:07:14 · 85 阅读 · 0 评论 -
Leetcode Problem111
Minimum Depth of Binary Tree问题描述:给定一个二叉树,找出其最小深度。其中最小深度是从根节点到最近叶子节点的最短路径上的节点数量。问题解决:起初我想的是将求树的深度的max改成min就可以解决了,结果不是,因为如果存在一个节点只有一个子节点的话,返回结果就错误了,因为此时的“最小值”不是从根节点到叶子节点的深度。所以后来我想的是找出从根节点到每个叶子节点的路径长...原创 2018-09-17 17:04:58 · 188 阅读 · 0 评论 -
Leetcode Problem21
Merge Two Sorted Lists问题描述:以从小到大的顺序合并两个排好序的链表,并且题目要求新链表应该通过拼接前两个链表的节点来完成。解题思路:首先先考虑特殊情况,如果两个链表中的一个为空,那么直接返回另外一个不为空的链表,接下来考虑均不为空的情况,先比较两个链表头部的值的大小,那个比较小的节点作为新链表的头部,设置指针p指向该链表的下一节点,设置指针q指向另外一个链表的头节点...原创 2018-08-24 19:41:46 · 98 阅读 · 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 · 110 阅读 · 0 评论 -
Leetcode Problem20
Valid Parentheses问题描述:典型的括号匹配问题。解决思路很简单,用一个栈来储存符号。具体操作如下:从头到尾遍历字符串,如果遇到左括号如( 、{ 、[ 就将其压入栈中,如果遇到右括号如)、}、] ,首先判断栈是否为空,如果为空则不匹配,如果不为空,将栈顶元素pop出来,并与当前符号比较,如果匹配则继续下去,如果不匹配则结束。 bool isValid(str...原创 2018-08-23 20:46:11 · 97 阅读 · 0 评论 -
Leetcode Problem18
4Sum问题描述:给定一个数组,要求一个四元组的四个数之和为target,找出所有不重复的四元组。这道题跟之前的3Sum是同一类型的题,就是在3Sum的基础上再加上一个循环。vector<vector<int>> fourSum(vector<int>& nums,int target){ vector<vector<i...原创 2018-08-20 22:04:19 · 91 阅读 · 0 评论 -
Leetcode Problem28
Implement strStr()问题描述:找到字符串中某个字串,并返回该字串第一次出现时首个字符的位置。问题解决:这道题是数据结构上一道非常经典的题目,然而为了偷懒我还是没用KMP算法。class Solution {public: int strStr(string haystack, string needle) { int nlen=needle.l...原创 2018-08-30 20:41:03 · 104 阅读 · 0 评论 -
Leetcode Problem27
Remove Element问题描述:删除数组中与给定数字相同的元素,并返回新数组的长度。问题解决:这道题看起来很简单,我的实现是下面这样的,class Solution {public: int removeElement(vector<int>& nums, int val) { int len=nums.size(); ...原创 2018-08-30 20:27:56 · 87 阅读 · 0 评论 -
Leetcode Problem26
Remove Duplicates from Sorted Array问题描述:从有序数组中删除重复元素并返回新数组的长度。问题解决:从数组的第二个元素开始,与前面元素进行比较,如果相同则删除,如果不同则从下个元素开始比较。class Solution {public: int removeDuplicates(vector<int>& nums) {...原创 2018-08-30 20:03:06 · 80 阅读 · 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 · 122 阅读 · 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-&gt;next为空,此时的...原创 2018-08-22 20:29:46 · 81 阅读 · 0 评论 -
Leetcode Problem22
Generate Parentheses问题描述:给定n对括号,要求能够生成格式正确的括号的所有组合。 例如给定n=3,那么结果应该是:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]这道题依旧可以用DFS来做。想象一棵二叉树,我们知道这个括号组合的第一个肯定是“(”,因此将他设为根节点,...原创 2018-08-26 20:40:14 · 80 阅读 · 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 · 130 阅读 · 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 · 114 阅读 · 0 评论 -
Leetcode Problem110
Balanced Binary Tree问题描述:给定一个二叉树,判断它是否是平衡二叉树。问题解决:平衡二叉树的定义是对于一棵二叉树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个定义的描述很容易联想到递归。class Solution {public: bool isBalanced(TreeNode* root) { ...原创 2018-09-17 16:20:29 · 90 阅读 · 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 · 97 阅读 · 0 评论 -
Leetcode Problem100
Same Tree问题描述:判断两颗二叉树是否是相同的树,即树的结构必须一致,对应节点的值相同。问题解决:一般来说树的问题用递归很容易解决,我们同时遍历两棵树,从两棵树的根节点开始,若当前节点有一个为空,那么两棵树的结构不一致,不是相同的树,如果两个节点不为空且两个节点的值不一样,那也不是相同的树,如果两个节点均为空,代表它们的父节点为叶子节点,往上回溯,如果两个节点不为空且节点的值相同,...原创 2018-09-17 14:32:35 · 96 阅读 · 0 评论