
经典算法题总结
总结个人刷题以来的各类题型
ProLayman
这个作者很懒,什么都没留下…
展开
-
经典算法题之(七)------ 建模为二维数组的连通图问题
先看具体例子:LeetCode:547. 朋友圈这道题可以多种变式,例如,有n个城市,连通关系存储在n*n矩阵中,问从某一个城市出发,可以最多到几个城市去?即在求连通子图的个数,思想本身也不算难,很多问题经过分析之后都能套用到这套模型中去,确切地说,如果将一个图用一个场景复现出来:每个连通图是某个实际意义的“圈子”,给出每个圈子中有哪些人,或者每个节点在哪些“圈子”(此圈子非彼圈子)中,那...原创 2019-08-30 21:24:47 · 1260 阅读 · 0 评论 -
经典算法题之(知识补充)------ BFS和DFS的感性认识
1091. 二进制矩阵中的最短路径问题描述及解答见上。在经典算法题之(六)------ 二维数组迷宫问题中列举了很多种情况,从条件放宽到可以任意走开始,就成了图的最短路径问题,一旦涉及到图的最短路径,则一定会用到DFS和BFS(能手写Dijkstra的话当我没说。。)。而这种两种思想在解决图的问题时也特别普遍,实际上,在二叉树的很多问题中也同样要用到这两种方法,特别是DFS,因为二叉树的三...原创 2019-08-18 14:28:47 · 287 阅读 · 0 评论 -
经典算法题之(六)------ 二维数组迷宫问题
1.0 无障碍,右下走,代价相等m*n的方格,要求最短路径从左上角到右下角,有多少种走法(有多少条最短路径)?解法一:动态规划,因为是最短路径,所以每一步只能往右或者往下走,那么到第n步(不在第一行或者第一列)只有两种方式:从上往下来的,或者左往右来的。所以可设二维数组:dp[m][n],dp[i][j]即从入口(a[0][0])走到a[i][j]的最短路径数目,容易推知:...原创 2019-07-17 22:40:56 · 10341 阅读 · 3 评论 -
经典算法题之(五)------ 最小比较次数寻找最大值和最小值
设计一个最优算法来同时找到n元素数组中的最大值和最小值,要求使用最小的比较次数:算法导论(3th Edition)9.1:https://blog.youkuaiyun.com/shuiziliu1025/article/details/509581901.5N即可应用:选择排序中,可以一下从剩下元素中选出Min Max,放在已经排好序的数组的首尾(虽然真正投入应用都是随机选择排序...原创 2018-12-19 12:09:56 · 1510 阅读 · 0 评论 -
经典算法题之(四)------ 最大子序列和
最大子序列和问题 最优的算法逻辑很简单,扫描,如果和>0就继续扫描,刷新一次最大和,如果<0就置0重新累积和: int Sum=0; int MaxSum; for (int i = 0; i < array.size(); ++i) { if(...原创 2019-06-27 14:26:42 · 340 阅读 · 0 评论 -
经典算法题之(三)------ 判断和寻找素数
判断和寻找素数问题:判断一个数是否为素数:① 定义法(brute force):除了1和本身不能被其他数整除遍历2到n-1,如果有任何可以被整除的数就返回false② 升级版,任何一个数如果可以表示为两个数的乘积:n = m1 * m2,则必然有m1或m2小于或等于(不可能都大于,不然矛盾),这样将①法的验证的右边界从n-1减小到。③ 再进阶,剔除了[2...原创 2019-06-27 14:11:07 · 327 阅读 · 0 评论 -
经典算法题之(番外)------ 上n级台阶
牛客网:今日最佳:原创 2019-04-10 22:19:51 · 146 阅读 · 0 评论 -
经典算法题之(二)------ 二叉树题型总结
非递归版本的三种遍历方式:求符合某一条件的节点的数目:应该算是二叉树的最基本题目显然,不论采用递归还是非递归版本,无论是先序,中序还是后序方式,思路是一样的,设一全局计数量--count在访问节点处放置判断条件,若符合条件则count++这可以有无数个变式:求节点个数(相当于限制条件为空) 求值等于/小于/大于x的节点个数 求叶子节点数 求只有...原创 2019-06-25 19:36:17 · 257 阅读 · 0 评论 -
经典算法题之(一)------ 找出序列中的重复数字(待整理)
判断一串数字中的重复数:int findDuplicated(int[] arr)************************************************************************************************************************************1.0:没有任何限制:arr中数字...原创 2019-04-15 20:07:37 · 2069 阅读 · 0 评论 -
经典算法题之(九)------ 尾递归
尾递归是啥简之,尾递归 = 尾调用+递归,对于这二者的认识可以先看这篇:浅谈尾递归一个简单的尾递归例子如下:public int f(int n){ if(0 == n) return 0; else return f(n-1); // 直接调用f(),没有赋值,运算}使用尾递归要注意以下几点:尾调用一定要是return f(x...原创 2020-01-18 00:44:43 · 462 阅读 · 0 评论 -
奇技淫巧(一)—— 不分奇偶讨论倒置数组
先看例子:偶数a[6]: 0 , 1 , 2 | 3 , 4 , 5 //MaxSize=6则应该i < 6/2=3; 即 0 1 2 交换 3 4 5奇数a[7]: 0 , 1 , 2 , 3 , 4 , 5 , 6 //MaxSize=7则应该 i <...原创 2019-10-13 16:24:55 · 7651 阅读 · 0 评论 -
奇技淫巧(二)—— 不使用中间变量交换两个值
使用中间变量的三行temp代码就不贴了,这里看一下不使用中间变量的方案:① "a=a+b"用a将a,b的和存储起来,之后利用减法,b换成a,a再换成ba = a+b; // a存变量之和b = a-b; // 和-原b得到aa = a-b; // 和-原a得到b同理,可以使用"a=a-b":a = a-b; // a存变量之差b =...原创 2019-10-13 13:04:03 · 14952 阅读 · 0 评论 -
奇技淫巧(三)—— 位运算实现大小写转换
^(1 << 5)实现大小写转换先看”现象“:奇妙吧,^(1 << 5)就能实现大小写转换。原理:先看ASCII码表:知:A—Z:65—90a—z:97—122可以看到,对于单个字符,小写比大写数值大了32,即1 << 5,如果将一个大写字符ch转化为小写,这样写就可以了:ch = ch + (1 << ...原创 2019-10-13 11:59:31 · 663 阅读 · 0 评论