算法
阿华Go
做一个有责任心有上进心的汉子,我要肩负起守护家人的重任!!!
展开
-
C++实现两个有序链表合并(17)---《那些奇怪的算法》
这种代码有点类似于归并排序的合并阶段,大家可以对应参考起来进行学习! ListNode结构struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};迭代版本:class Solution { public: Li原创 2017-10-29 20:41:57 · 367 阅读 · 0 评论 -
C++之最长公共子序列(21)---《那些奇怪的算法》
一个char*的数组,注意其长度需要我们自己求解,另一个string类型,长度可以直接使用length方法,因此可以很棒的实现,注意,代码中的h[i][j]代表s1[0…i],s2[0…j]的最长公共子序列,我们使用动态规划方法实现!#include <iostream>#include <string>#include <vector>using namespace std;int lcs_原创 2017-11-25 17:26:16 · 323 阅读 · 0 评论 -
C++之最长公共子串(最长子数组和)(22)---《那些奇怪的算法》
C++之间最长连续公共子串的长度(最长子数组和)!#include <iostream>using namespace std;int lss(int arr[], int n){ int sum = 0, before = 0; for (int i = 0; i < n; i++){ sum += arr[i]; if (sum>before)原创 2017-11-25 18:16:41 · 395 阅读 · 0 评论 -
C++之最长递增子序列的实现(20)---《那些奇怪的算法》
在实现一个快速实现的方法时候,我们首先采用一种比较传统的方法,即暴力算法,在对当前元素进行操作的时候,每次都遍历前面的所有元素,其时间复杂度为O(n^2),实现代码如下:1)暴力求解int findLongest(vector<int> A, int n) { vector<int> d(n, 0); d[0] = 1; int max_all = 1; for (i原创 2017-11-25 17:00:00 · 863 阅读 · 0 评论 -
C++之平衡二叉树的判定(25)---《那些奇怪的算法》
我们知道,平衡二叉树要求二叉树的左右子树的深度差不超过1,即可以取值为{-1,0,1},同时,空树也为平衡二叉树,知道了这些,我们可以方便的进行平衡二叉树的判定,实现代码如下:即定义一个求树的深度的一个函数,我们使用递归进行定义,然后我们定义判定树是否为平衡二叉树的函数,同样使用递归定义,因为平衡二叉树的左右子树一定为平衡二叉树!class Solution {public: bool i原创 2017-12-13 10:37:24 · 375 阅读 · 0 评论 -
C++之统计二叉树中路径和为定值的所有路径(24)---《那些奇怪的算法》
现在,有问题如下: 问题参考牛客网《leetcode》部分,即针对二叉树求解其和为定值的所有路径,我们的解决思路为递归的进行求解,若该路径和为给定的定值,则将其加入,否则,继续求解! 实现代码如下:代码1:class Solution {public: vector<vector<int> > pathSum(TreeNode *root, int sum) { v原创 2017-12-12 23:20:17 · 407 阅读 · 0 评论 -
C++之最长前缀字符串(13)---《那些奇怪的算法》
参考:《one-day-one-leetcode》 需要求出多个字符串的最长前缀字符串,即求出最小的字符串,然后求出最小字符串的长度和对应的字符串,然后在最短字符串的长度内进行和其他字符串的匹配即可!#include <iostream>#include <string>#include <vector>using namespace std;string longestCommonfix(原创 2017-10-15 14:12:29 · 669 阅读 · 0 评论 -
C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
参考《one-day-one-leetcode》在上篇博客中我们讨论了将1~3999以内的数字转化为罗马数字,着重讨论了非7个标准的罗马数字的一些表达,例如4,6,3等等的表达,这篇博客我们着讨论一下将罗马数字转化为整型数字的情况! 其实我们在进行转化的时候主要注意一下4,40,400,等数字的表达即可!代码:#include <iostream>#include <string>#inclu原创 2017-10-15 11:45:52 · 458 阅读 · 0 评论 -
C++之整数转化为罗马数字(11)---《那些奇怪的算法》
参考:《one-day-one-leetcode》要求:将整形数字转化为罗马数字,我们都知道罗马数字有7个,分别为I(1),V(5),X(10),L(50),C(100),D(500),M(1000),这有个弊端,就是我们需要限制我们的输入在1~3999内,因为大于3999或者小于1无法使用罗马数字表示!代码实现: 1)_simple我们列举了所有可能出现的情况,然后进行相应的匹配,代码逻辑简单;原创 2017-10-15 11:07:06 · 892 阅读 · 0 评论 -
C++之数字容器装水问题(10)---《那些奇怪的算法》
参考:《one-day-one-leetcode》 问题描述: 注意理解程序中容器装水取决于容器的小的那边,并不是容器的大的那边。优化实现代码:#include <iostream>#include <string>#include <vector>using namespace std;int maxArea(vector<int> height){ int i = 0;原创 2017-10-14 22:20:19 · 1371 阅读 · 0 评论 -
C++之字符串的zipzag排列(9)---《那些奇怪的算法》
参考:《one-day-one-leetcode》针对字符串我们进行zipzag排列,首先我们需要了解什么是zipzag排列,如下图所示: 现在,我们针对这种特性进行代码编写:#include <iostream>#include <string>using namespace std;string zipzagcode(string s,int row){ int len = s原创 2017-10-14 21:24:46 · 508 阅读 · 0 评论 -
C++之最长回文字符串的判断(8)---《那些奇怪的算法》
计算字符串中最长回文子串,我们使用了一下5种方法: 1)暴力求解,不用将奇数字符串和偶数字符串分开讨论,只需要前向和后向确定元素的工作同时进行,通过不断从左边缩小字符串来求出其回文子串,进而得到最长的回文子串; 2)中心拓展法:遍历每个字符,然后以该字符为中心向左右两边进行拓展,从左向右移动,就可以获取最长的回文子串的,但是需要注意奇数和偶数回文子串的不同,需要进行不同的处理; 3)中心拓展发原创 2017-10-13 17:53:55 · 1697 阅读 · 0 评论 -
C++之给定向量中4个元素的和等于给定值得向量和(16)---《那些奇怪的算法》
参考:《one-day-one-code》 问题描述: 实现代码:#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;vector<vector<int>> fourSumCloseOneNumVec1(vector<int> nums, int ta原创 2017-10-22 22:29:59 · 208 阅读 · 0 评论 -
C++之求取vector中三个元素和和给定元素最接近的值(15)---《那些奇怪的算法》
参考:《one-day-one-leetcode》 问题描述:给定一个向量vec,求取vec中三个数组的和与给定元素target最接近,输出该值!我们对于这种问题有两种思路,一种是直接利用暴力算法求解,通过三重循环一直让其不断寻找,直至找到和查找值最接近的值;第二种方式是利用智能方法求解,不断地将值所能取得的范围缩小,然后逐步求解,但是这里需要注意注意i->i+1的变换,需要保持key不变!#in原创 2017-10-22 21:43:03 · 2276 阅读 · 0 评论 -
C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
我们需要实现二叉树的镜像操作,问题描述如下: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6原创 2017-10-29 23:26:36 · 360 阅读 · 0 评论 -
C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
在数据结构中,我们经常需要根据不同的组合遍历顺序确定一个二叉树,并生成它,现在就来整理一下思路,这儿以中序遍历和后序遍历为例! 如上图所示,我们先由于后序遍历找到根结点,然后在中序遍历的序列中找到对应的根结点,此时可以将中序遍历和后续遍历中左右子树的位置确定,然后递归进行划分,注意递归的结束条件的设置! 实现代码如下:1)递归结束条件为:i_l>i_r,注意调用时候的参数设置!class Sol原创 2017-12-14 14:46:27 · 315 阅读 · 0 评论