算法
封狼居胥ˇ
BUPT在读研究生,为了能更好的学习人工智能,开始开通CSDN博客,坚持把自己学习遇到的问题写成博客贴出来。一方面促进自己的学习并且在日后遇到相同问题可以回来看看,另一方面也可以帮助其他和我遇到相同问题的道友。坚持下去,我相信,总有一天会看到更好的自己!
展开
-
LeetCode动态规划专栏(简单:1-20)
在做数组的题目时常常也能遇到DP的问题,感觉掌握DP对于提升代码能力很重要。下面开始进行DP章节的刷题。 PS:其中有一部分题可能在数组章节出现过,但是由于很经典,所以我决定二刷。 最大子序和(53)—2刷 这道题一开始我还是没想到DP的求解方法,写出了如下图的错误解法1(设置两个指针,头尾各一个,逐步往内缩小)。 ...原创 2019-10-22 16:52:00 · 174 阅读 · 0 评论 -
LeetCode树专栏(简单:1-20)
相同的树(100) 第一种方法可以看作先序遍历的递归形式,还是比较好写出来的。 树的递归操作有时候会导致递归调用栈过深,所以可以需要掌握非递归的形式。第二种方法是层次遍历的非递归形式。 ...原创 2019-10-20 17:43:08 · 133 阅读 · 0 评论 -
JS树的遍历
先序、中序、后序、层次遍历: //树的数据结构 function TreeNode(x){ this.val = x; this.left = null; this.right = null; } //先序遍历(Degree Left Right) function DLR(root){ console.log(root.val); if(root.lef...原创 2019-10-16 21:52:09 · 665 阅读 · 0 评论 -
LeetCode数组专栏(简单:21-40)
最大连续1的个数(485) 这道题没什么可说的,比较容易。 斐波那契数(509) 这道题目测应该是用递归做。。。 使用动态规划的方法(直观的公式),效率更高~。 ...原创 2019-10-12 12:16:05 · 195 阅读 · 0 评论 -
LeetCode数组专栏(中等:1-20)
今天是十一过后,实验室项目忙到忘记自我。已经很久没碰算法题了,开始刷中等题了,感受一下被难度支配的恐惧~~~ 1.盛最多水的容器(11) 看到这道题,有点尴尬。。。这道题是我当初面试机器学习岗位时候,一家公司面试题中的一道算法题。。我当时是没做出来~~~尴尬。 这道题我的思路是先循环height,找到最长的高度和次长的高度,计算出他们之间的容水量,然后基于此,向外扩展,一点一点比较,...原创 2019-10-09 21:23:02 · 199 阅读 · 0 评论 -
LeetCode字符串专栏(简单:1-20)
接着数学专栏刷的同时,同时开辟字符串专栏,这一栏中的简单题有很多都是和别的专栏重合的,所以下面的题目选自不重合的新题。 最长公共前缀(14) 第一种方法是外层遍历数组中每一个字符串,内层遍历每个字符串的每一个字符,与结果字符串初始(第一个字符串)相比较,如果到特定位置不同,则“砍下”不同字符往后的子字串串,依次这么“砍”下去,最后就会得到公共的结果字符串。需要注意的是如果当前字符串比当前...原创 2019-09-14 21:45:55 · 161 阅读 · 0 评论 -
LeetCode数学专栏(简单:1-20)
上一章刷的是数组专栏,这次刷数学专栏。 整数反转(7) 这种题没什么特别的,就是需要知道这种思想方法:反转利用取余得到末尾的数字(也就是结果的开头),然后循环乘以10,使得它最终到达应该在的首位。 回文数(9) 这道题的进阶是不将数字转化为字符串从而解决它。那么第一种方法显而易见就是将数字转化为字符串,进而求解: 第一种方法显而易见,难点在于不转换为字符串。下面需要多...原创 2019-09-13 19:09:58 · 218 阅读 · 0 评论 -
LeetCode数组专栏(简单:1-20)
为了找工作不得不加油刷题呀o(╥﹏╥)o,但是Leetcode的题刷完就忘,所以特开一帖,记录我的刷题过程。每道题目标题后边的括号中对应的leetcode的题号。 这一遍我打算使用js去刷,因为当前的目标是找到一个前端的实习,找到实习之后就可以没事去和朋友玩耍了(*^ ▽ ^*),附上刷题网址:https://leetcode-cn.com/problems 两数之和(1) 这道题我一开...原创 2019-08-27 21:36:57 · 345 阅读 · 0 评论 -
BFS、DFS学习及Python实现
广度优先遍历(BFS) 顾名思义,BFS总是先访问同一层的结点,然后向外扩展访问下一层结点,它最有用的性质是可以遍历一次就生成中心结点到所遍历结点的最短路径,这一点在求无权图的最短路径时非常有用。 from queue import Queue def bfs(graph, start): # 创建一个set记录点是否已被遍历 visited = set() q = ...原创 2019-07-20 12:38:26 · 1916 阅读 · 0 评论 -
红黑树
1.为什么要用红黑树 了解红黑树之前先要知道二叉查找树(BST) 简单来说,二叉查找树有如下特点: 左子树上的点小于根节点的值 右子树上的点大于根节点的值 左右子树必定分别为二叉排序树 我们理想的构建二叉排序树的结果是让他尽可能“扁平”。最理想的是让其变成平衡二叉树。这样查询效率为O(logN),其中N为树的高度。但是有时候往往会出现如下情况:根节点过大或过小,导致子节点集中分布在左子树或者...转载 2019-07-19 19:55:30 · 91 阅读 · 0 评论 -
算法图解
第二章.选择排序 链表与数组混合型的数据结构适合存储用户信息。此数据结构在查找时比数组慢,比链表快;在插入数据时,比数组快,与链表差不多(仅多一步查找字母所在数组位置) 该数据结构并非静态链表,静态链表如下: 选择排序时间复杂度为O(n^2) def findSmallest(arr): # 存储最小的值 smallest = arr[0] # 存储最小元素的索...原创 2019-07-07 16:52:15 · 265 阅读 · 0 评论