![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 81
话歪之地
这个作者很懒,什么都没留下…
展开
-
算法学习--编程易错小知识记录汇总
算法学习中。记录编程学习中的小错误。原创 2017-06-26 10:44:02 · 352 阅读 · 0 评论 -
算法学习之分治--快速排序
分治的典型应用:快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序。设要排序的数组是A[0],A[1], …, A[N-1],首先任意选取一个数据作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称之为一趟快速排序。整个排序过程有多原创 2017-09-19 07:28:10 · 553 阅读 · 0 评论 -
算法学习之分治--归并排序
分治的基本概念:把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。数组排序任务可以如下完成:1) 把前一半排序2) 把后一半排序3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。代码实现归并排序:#inclu原创 2017-09-19 07:24:20 · 649 阅读 · 0 评论 -
算法学习之动态规划--数字三角形最大路径和
题目:73 88 1 02 7 4 44 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为 0 - 99。输入格式:5//三角形行数。下面是三角形73 88原创 2017-09-19 20:40:40 · 5833 阅读 · 0 评论 -
算法学习之动态规划--最长上升子序列
问题描述:一个数的序列ai,当a1 你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入数据 输入的第一行是序列的长度N (1 输出要求 最长上升子序列的长度。 输入样例 7 1 7 3 5 9 4 8 输出样例 4解题思路:1.找子问题 “求序列的前n个元素的最长上升子序列的长度”是个子问题,但这样分解子问题,不具有“无原创 2017-09-19 22:13:19 · 577 阅读 · 0 评论 -
算法学习之递归--表达式计算(简单计算器)
题目:输入为四则运算表达式,仅由整数、+、-、*、/ 、(、) 组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数。解题思想:表达式的计算是个递归过程,如下图递归解决代码如下:#include#include#includeusing namespace std;int expression_value();原创 2017-09-12 19:12:24 · 3375 阅读 · 0 评论 -
算法学习之递归--爬楼梯问题
例题: 爬楼梯树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。输入:输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 输出:不同的走法数,每一行输入对应一行输出分析:n级台阶的走法 = 先走一级后,n-1级台原创 2017-09-12 20:01:14 · 15470 阅读 · 0 评论 -
算法学习之递归--放苹果问题
问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(注:5,1,1和1,5,1 是同一种分法)分析:设 f(m,n) 为m个相同的苹果放到n个相同的盘子中的方法总数。下面对n进行讨论,当 n>m 时,则必有n-m个盘子是空的。去掉这些空盘子对总的摆放情况数目不影响。即当n>m时,有 f(m,n) = f(m,m)当 n1、有空盘,至少原创 2017-09-12 21:28:15 · 901 阅读 · 0 评论 -
算法学习之动态规划--最长公共子序列
题目:给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。Sample Input :abcfbc abfcabprogramming contestabcd mnpSample Output :420题目分析:输入两个串s1,s2, 设MaxLen(原创 2017-09-20 22:14:21 · 355 阅读 · 0 评论 -
堆和栈相关知识
网上关于堆和栈的资源很多,推荐几篇文章http://blog.csdn.net/hairetz/article/details/4141043 (堆和栈的区别,以及程序数据存储位置。非常好的文章)http://jingyan.baidu.com/article/6c67b1d6a09f9a2786bb1e4a.htmlhttp://www.cnblogs.com/jztan/p原创 2017-10-12 12:47:28 · 230 阅读 · 0 评论 -
牛刀小试一:矩阵最短路径
题目:给定一个M×N的矩阵,定义一条路径为:从矩阵左上顶点数字出发到达右下数字,每一次只可以从一个数字出发向右移动一步或向下移动一步,定义路径和为:路径经过的数字的和。要求编写一个程序,找到路径和最小的那条路径,并给出最小路径和。给定如图所示矩阵:一条路径为2->0->3->6->9->5,路径和为25[2 ,0 ,11,1 ][4 ,3 ,6 ,12][7 ,10,9 ,原创 2017-12-05 21:12:10 · 2898 阅读 · 1 评论 -
牛刀小试二:字符串回文分割 Palindrome Partitioning (DFS+Backtrack)
题目:给定一个字符串s,要求划分串s使得得到的每一个子串都是一个回文串(即字符串从中间划分,前、后字符为镜像),结果返回所有可能的划分。例如:给定s=“ababc”,返回[ [“aba”,“b”, “c”], [“a”,“bab”, “c”], [“a”,“b”, “a”, “b”, “c”]]才发现这是LeetCode上的题目,链接在此。主要是深度优先搜索和回溯法的原创 2018-01-01 13:55:36 · 377 阅读 · 0 评论 -
迪杰斯特拉算法Java实现 Disjktra
关于迪杰斯特拉的理论知识,参考理解最短路径——迪杰斯特拉(dijkstra)算法代码实现从源点到其他各点最短路径:最重要的是每次循环找出离源点最近的未标记点 nearestPos,然后以此点为中间点,修正从 start 点经过 nearestPos 点到其他各点 i 的最短路径长度。public class Dijkstra { static int MAX = 10000; p原创 2018-01-02 10:59:00 · 740 阅读 · 0 评论 -
数值的整数次方
原题链接点击这里题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。AC代码:public class Solution { public double Power(double base, int exponent) { int exp=0; if(exponent&g...原创 2018-03-09 22:37:36 · 215 阅读 · 0 评论 -
字符串的排列--字典序生成、回溯
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 题目链接AC代码:import java.util.ArrayList;import java.util.TreeSet;public class Solution { public ArrayLi...原创 2018-03-19 12:00:55 · 653 阅读 · 0 评论 -
矩阵中的路径--回溯
题目描述: 题目链接 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如下矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径...原创 2018-03-19 12:49:51 · 457 阅读 · 0 评论 -
算法学习之递归--4个数组成24的问题
题目:给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能原创 2017-09-16 19:17:32 · 8715 阅读 · 0 评论 -
无符号整型数用二进制串表示,求此串中1的个数
比方说数11,用二进制表示是1011 其中1的个数是3. 此题的求解方法有好多种,参考此文章http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 这篇文章中有好多种算法,值得一读。这里主要再分析一下完美法的算法。算法代码如下:int bitcount(unsigned int n){ unsigned int原创 2017-09-14 21:42:53 · 879 阅读 · 0 评论 -
PAT乙级 1007. 素数对猜想 (20)
题目:链接https://www.patest.cn/contests/pat-b-practise/1007让我们定义 dn 为:dn = pn+1 - pn ,其中 pi 是第i个素数。显然有 d1 =1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N (5 ),请计算不超过N的满足猜想的素数对的个数。原创 2017-07-01 16:02:45 · 356 阅读 · 0 评论 -
PAT乙级 1054. 求平均值 (20) 字符串转换成浮点数相关sscanf、sprintf、atof
题目链接https://www.patest.cn/contests/pat-b-practise/10541054. 求平均值 (20)时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue原创 2017-07-24 10:28:03 · 343 阅读 · 0 评论 -
位运算
1、概述位运算概念:用于对整数类型(int,char, long 等)变量中的某一位(bit),或者若干位进行操作。比如:1) 判断某一位是否为12) 只改变其中某一位,而保持其他位都不变。C/C++语言提供了六种位运算符来进行位运算操作:& 按位与(双目)| 按位或(双目)^ 按位异或(双目)~ 按位非(取反)(单目)左移(双目)>>原创 2017-08-16 16:53:30 · 549 阅读 · 0 评论 -
在给定的序列中寻找两数之和为定值m的情况--对算法复杂度的分析与优化
问题:输入n(n方法一:题目就是为了找两个数之和为m的情况,那我们可以用两重循环,枚举所有的取数方法。for(int i=0;i<n-1;++i){ for(int j=i+1;j<n-1;++j) if(a[i]+a[j]==m) break;}//这样就找到了i和j此方法时间复杂度为O(n^2). 且n^2约为100亿,原创 2017-08-17 17:03:29 · 442 阅读 · 0 评论 -
算法学习之枚举--称硬币
枚举就是逐个尝试,直到找出正确答案。下面通过一个称硬币问题继续学习枚举思想。问题:有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。 输入:第一行是测试数据组数。每组数据有三行,每行表示一次称量的结果。银币标号为A-L。每次称量的原创 2017-08-19 09:46:19 · 3173 阅读 · 0 评论 -
算法学习之枚举--熄灯问题POJ1222EXTENDED LIGHTS OUT
题目链接http://poj.org/problem?id=1222这道题在MOOC平台上老师当枚举例题讲的,但是我网上搜了一下更多的是高斯消元法。二维数组模拟http://blog.csdn.net/morgan_xww/article/details/5801296高斯消元法http://blog.csdn.net/shiren_Bod/article/details/576690原创 2017-08-19 20:55:33 · 678 阅读 · 0 评论 -
实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
分析:栈的出栈和入栈操作都是时间复杂度O(1)的,问题主要是如何获得栈中所有元素的最小值。其实如果问题是数组中存入很多元素,取出元素中的最小值,时间O(1),那很简单,就是设置一个变量,每次存入数据的时候都和最小值变量比较,到最后取此变量值即可。但是在栈中,我们要求不管push或者pop多少次,此时直接取最小值要求依然O(1)。也很简单,在我们存数据的数据栈之外弄一个辅助栈,每次数据存入数据栈时,原创 2017-08-20 17:00:34 · 1237 阅读 · 0 评论 -
两个栈实现一个队列,并实现队列入队、出队、取队头、取队尾相关操作
分析:栈是先进后出,队列是先进先出。可以在草稿本上模拟一下,然后就可以理解下面程序。对照下面的示意图。实现代码:#include#includeusing namespace std;template class DoubleStack_Queue{public: void Push(T data){ s1.push(data);原创 2017-08-21 10:19:13 · 1583 阅读 · 0 评论 -
两个队列实现一个栈,并实现入栈、出栈、取栈顶等相关操作
分析:熟悉队列的先进先出,队列的进队出队、取队头队尾相关操作。这样就不难实现栈的相关操作。对照下面的示意图,理解程序代码。实现代码:#include#includeusing namespace std;templateclass DoubleQueue_Stack{public: void Push(T data){ //将元原创 2017-08-21 10:23:19 · 619 阅读 · 0 评论 -
从数组中找出只出现一次的两个数,数组中其他数都出现两次
题目:在数组中有两个数只出现一次,其他数均出现两次。问怎样快速找出这两个数。方法一:直接遍历整个数组,建成类似hash的数组。用原始数组中元素值当hash数组下标,出现次数当hash数组元素值。最后再遍历一次hash,找出值为1元素的下标。或者不用hash数组,用map的键值对。思想一样的。时间复杂度:O(n)空间复杂度:O(n)还有没有更优的算法呢?联想到我们原创 2017-08-21 16:57:34 · 7534 阅读 · 1 评论 -
算法学习之递归--汉诺塔问题
一个函数调用其自身就是递归。最经典的递归求阶乘如下:int Factorial(int n){ if(n == 0) return 1; return n * Factorial(n-1);}递归和普通函数调用都是通过栈实现的。汉诺塔问题古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有原创 2017-08-21 19:30:48 · 433 阅读 · 0 评论 -
算法学习之递归--逆波兰表达式
递归的作用:1) 替代多重循环2) 解决本来就是用递归形式定义的问题3) 将问题分解为规模更小的子问题进行求解....这次我们用递归来解决递归形式的问题。逆波兰表达式问题:逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 +3)原创 2017-08-22 09:29:15 · 819 阅读 · 0 评论 -
算法学习之递归--N皇后问题
递归的作用:1) 替代多重循环2) 解决本来就是用递归形式定义的问题3) 将问题分解为规模更小的子问题进行求解....现在就用递归代替多重循环解决N皇后问题。n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,输出全部方案。 输入一个正整数N,则程序输出N皇后问题的全部摆原创 2017-08-21 21:10:20 · 1059 阅读 · 1 评论 -
二叉树(二) 求二叉树高度,根据先序和中序构建二叉树,判断二叉树是否是完全二叉树,判断两棵树是否相等
根据上一篇二叉树的各种遍历方法,本篇文章进一步写出二叉树相关操作函数代码。1、求二叉树高度递归求解:/*递归求二叉树高度*/int Btdeep(BiTree T){ if(T == NULL) return 0; int ldeep = Btdeep(T->lchild); int rdeep = Btdeep(T->rchild);原创 2017-08-15 20:11:13 · 763 阅读 · 0 评论 -
二叉树(一) 先序遍历、中序遍历、后续遍历、层次遍历的递归与非递归实现
直接看代码吧,理论知识略了,网上一搜一大把,本篇主要记录代码实现过程。#include#include#include#include#includeusing namespace std;/*二叉树链式存储结构*/typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTN原创 2017-08-15 16:33:59 · 460 阅读 · 0 评论 -
C++常见字符串操作函数的实现(strcpy/strcat/strcmp/strlen/strchr/strstr/strpbrk/strrev等)
先看一下字符串操作函数,点这里C语言字符串操作总结大全(超详细)1、strcpy函数原型:char *strcpy(char *dest, const char *src) 函数功能:将源字符串src的内容复制到目的字符串dest中,并返回指向目的字符串dest的指针。注意:要求dest字符串长度要大于或等于src长度,否则会越界。复制时会将src的结束符'\0'也复制到d原创 2017-08-09 12:06:16 · 1461 阅读 · 0 评论 -
用m种颜色着色圆的n个扇形的方法总数
题目: 将圆分成 nnn 个扇形,用 mmm 种不同颜色染色,并且相邻的扇形不同色,问有多少种着色方法。分析: 假设将圆分成 nnn 个扇形符合题意的着色方法有 AnAnA_n 种。 对第一个扇形着色有 mmm 种,第二个扇形有 (m−1)(m−1)(m-1) 种,第三个扇形有 (m−1)(m−1)(m-1) 种…………\ldots\ldots第 nnn 个扇形有 (m−1)(m−1)(m-...原创 2018-03-19 21:05:26 · 4639 阅读 · 0 评论