算法
HenryQWER
这个作者很懒,什么都没留下…
展开
-
socket长连接是什么意思(关键词:计算机网络/连接/socket/长连接/短连接)
socket长连接是什么意思短连接:1 次 socket 连接后,只进行 1 次 HTTP 事务,然后断开 socket 连接;长连接:1 次 socket 连接后,不管是否使用 socket 连接(进行多次 HTTP 事务),不断开 socket 连接。参考文献TCP/IP,http,socket,长连接,短连接...原创 2018-12-12 10:03:34 · 1059 阅读 · 0 评论 -
交叉链表求交点(关键词:链表/交叉链表/交点/交集)
交叉链表求交点实现def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ if headA is not None and headB is not None:原创 2018-12-10 12:11:36 · 361 阅读 · 0 评论 -
单链表反转(关键词:链表/单链表/反转/逆转/逆置)
单链表反转一点解释可以拿 1 种最简单的情况为例,2 个结点的单链表,纸笔画示意图,代码很好理解,不做详细解释了。实现方法 1def reverseList(head): prev = None while head is not None: cur = head head = head.next cur.next = prev prev = cur return...原创 2018-12-09 23:26:21 · 375 阅读 · 0 评论 -
比较两棵树是否相同(关键词:树/二叉树/相同/相等/完全相同)
比较两棵树是否相同实现def isSameTree(p, q): if p == None and q == None: return True elif p != None and q != None: return p.val == q.val and isSameTree(p.left, q.left) and isSameTree(p.right, q.right) el...原创 2018-12-09 18:16:34 · 3296 阅读 · 0 评论 -
无序数组求中位数
长度为 n 的无序数组,求中位数,如何尽快的估算出中位数,算法复杂度是多少?算法 1(建立最小堆):如果数组中元素有奇数个,可以采用这种算法:步骤 1 :可以将数组的前 (n+1)//2 个元素,建立 1 个最小堆;步骤 2 :遍历剩余元素,如果剩余元素小于堆顶元素,则丢弃或不作处理;如果剩余元素大于堆顶元素,则将其取代堆顶元素,并将当前堆调整为最小堆。步骤 3 :返回堆顶元素,即 nu...原创 2018-12-07 16:34:46 · 2190 阅读 · 0 评论 -
求最大树深(关键词:树/二叉树/深度/高度/最大高度/最大深度/递归/非递归/层序遍历)
求最大树深递归算法class Solution: def maxDepth(self, root): """ :type root: TreeNode :rtype: int # 递归 - 极简 - 开始: if root is None: return 0 f =...原创 2018-12-09 12:00:06 · 1169 阅读 · 0 评论 -
排序算法之快速排序(关键词:数据结构/算法/排序算法/快速排序)
快速排序实现def partition(nums, left, right): middle = (left+right) // 2 pivot = nums[middle] swap(nums, middle, right) # 现在主元 pivot 等于 nums[right] boundary = left for index in range(left, right):...原创 2018-12-06 21:15:59 · 639 阅读 · 0 评论 -
二叉树层序遍历(关键词:树/二叉树/遍历/层序遍历/层次遍历)
二叉树层序遍历实现 def levelOrder(self, root): if root is None: return [] res = [] queue = [root] while queue != []: res.append([node.val f...原创 2018-12-10 15:02:30 · 739 阅读 · 0 评论 -
先序遍历二叉树(关键词:树/二叉树/先序遍历/先根遍历/先序搜索/先根搜索)
先序遍历二叉树递归算法def preorderTraversal(root): f = preorderTraversal return [root.val] + f(root.left) + f(root.right) if root else []非递归算法def preorderTraversal(root): res, stack = [], [(root, False)]...原创 2018-12-10 20:59:23 · 503 阅读 · 0 评论 -
中序遍历二叉树(关键词:树/二叉树/中序遍历/中根遍历/中序搜索/中根搜索)
中序遍历二叉树递归算法def inorderTraversal(root): f = self.inorderTraversal return f(root.left)+[root.val]+f(root.right) if root else []非递归算法def inorderTraversal(root): stack, res = [(root, False)], []...原创 2018-12-10 21:19:07 · 529 阅读 · 0 评论 -
创建字典的方法(关键词:字典/创建/方法)
创建字典的方法1. 直接创建>>> d1 = {'a':1, 'b':2}>>> d1{'a': 1, 'b': 2}>>> d2 = dict(a=1,b=2)>>> d2{'a': 1, 'b': 2}2. 工厂方法>>> items = [('name', 'earth'),原创 2018-12-11 17:50:53 · 4152 阅读 · 0 评论 -
二维矩阵查找(矩阵/二维矩阵/杨氏矩阵/查找/搜索)
二维矩阵查找问题描述在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。实现 def searchMatrix(self, matrix, target): if len(matrix) == 0: return False...原创 2018-12-11 17:38:19 · 689 阅读 · 0 评论 -
二维矩阵查找(矩阵/二维矩阵/杨氏矩阵/查找/搜索)
二维矩阵查找问题描述在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。实现 def searchMatrix(self, matrix, target): if len(matrix) == 0: return False...原创 2018-12-11 17:38:19 · 665 阅读 · 0 评论 -
已知中序、后序构造二叉树(关键词:二叉树/前序/先序/中序/后序/先根/中根/后根/遍历/搜索/查找)
已知中序、后序构造二叉树递归算法 def buildTree(inorder, postorder): if inorder and postorder: postRootVal = postorder.pop() inRootIdx = inorder.index(postRootVal) ...原创 2018-12-11 14:39:42 · 208 阅读 · 0 评论 -
已知前序、中序构造二叉树(关键词:二叉树/前序/先序/中序/后序/先根/中根/后根/遍历/搜索/查找)
已知前序、中序构造二叉树实现def buildTree(self, preorder, inorder): if inorder: rootVal = preorder.pop(0) rootIdx = inorder.index(rootVal) root = TreeNode(rootVal) root.left = self.buildTree(preorder, i...原创 2018-12-11 14:26:44 · 252 阅读 · 0 评论 -
两个字符串是否是变位词(关键词:字符串/变位词/顺序/错乱/颠倒)
两个字符串是否是变位词问题描述Given two strings s and t , write a function to determine if t is an anagram of s.Example 1:Input: s = "anagram", t = "nagaram"Output: true算法 1:统计字母出现的次数def countChar(string原创 2018-12-11 15:42:02 · 664 阅读 · 0 评论 -
回文字符串(关键词:字符串/回文/回文字符串/递归/非递归)
回文字符串递归算法 def isPalindrome(self, s): if len(chars) <= 1: return True return chars[0] == chars[-1] and self.isPalindrome(chars[1:-1])非递归算法 def isPalindrome(s):...原创 2018-12-11 10:24:28 · 855 阅读 · 0 评论 -
后序遍历二叉树(关键词:树/二叉树/后序遍历/后根遍历/后序搜索/后根搜索)
后序遍历二叉树递归算法def postorderTraversal(root): f = postorderTraversal return f(root.left) + f(root.right) + [root.val] if root is not None else []非递归算法def postorderTraversal(self, root): stack = [(r...原创 2018-12-10 21:42:14 · 194 阅读 · 0 评论 -
排序算法之归并排序(关键词:数据结构/算法/排序算法/归并排序)
假定:有 1 个乱序的数列 nums ,其中有 n 个数。要求:排好序之后是 从小到大 的顺序。归并排序算法代码def merge(a, b): res = [] A = 0 B = 0 while A<len(a) and B<len(b): if a[A] < b[B]: res.append(a[A]) A += 1 else: ...原创 2018-12-06 17:35:38 · 318 阅读 · 2 评论 -
二分查找算法(关键词:查找算法/二分法/二分查找算法/)
二分查找算法实现def bi_search(nums, target): low = 0 high = len(nums)-1 while low <= high: mid = (low+high)//2 if target == nums[mid]: ...原创 2018-12-08 16:04:29 · 1681 阅读 · 4 评论 -
搜索交集的工具 —— Python实现(关键词:函数/交集)
搜索两个字符串的公共元素,并支持列表、元组、字典等多种数据类型。def intersect(seq1, seq2): res = [] # 初始化一个空的序列res,用于存放公共元素。 for x in seq1: # 遍历第一个序列seq1中的每个元素, if x in seq2: # 如果第一个序列seq1中的元素,原创 2017-12-19 21:36:56 · 372 阅读 · 0 评论 -
算法第4版(谢路云译)学习笔记(2) -- Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
http://blog.csdn.net/molin4/article/details/55107246#comments在阅读算法(Algorithms Fourth Edition) 第4版时,第一个二分查找法的例子时:package algs.search;import java.util.Arrays;import edu.princeton.cs.algs4转载 2017-06-12 18:12:14 · 907 阅读 · 0 评论 -
算法第4版(谢路云译)学习笔记(1) -- 课后习题答案
https://segmentfault.com/a/1190000006880235?_ea=1201932转载 2017-06-12 18:02:25 · 1484 阅读 · 0 评论 -
算法(关键词:普林斯顿/Coursera/视频)
算法第四版 coursera公开课 普林斯顿算法 ⅠⅡ部分 Robert Sedgewick主讲《Algorithms》http://www.cnblogs.com/mrchige/p/5999923.html完整视频-coursera公开课 普林斯顿算法 ⅠⅡ部分http://download.csdn.net/detail/smilencet转载 2017-06-11 20:29:39 · 3160 阅读 · 0 评论 -
算法与数据结构(1) -- 红黑树
http://blog.csdn.net/chenhuajie123/article/details/11951777http://blog.csdn.net/v_JULY_v/article/details/6105630转载 2017-05-30 15:19:41 · 342 阅读 · 0 评论 -
飞龙的程序员书单 – 数据结构、算法
http://blog.csdn.net/wizardforcel/article/details/50525931入门向啊哈!算法这本书真心简洁易懂,dijkstra我是看课本怎么看也看不懂,最后看这本书才懂的。真心推荐。大话数据结构工程向算法Java实现C实现C++实现普林斯顿的算法课程教材,Coursera上面有转载 2017-06-09 00:09:27 · 396 阅读 · 0 评论 -
算法第4版(谢路云译)学习笔记(3) -- 字符串连接操作的时间复杂度
比如连接算字符串是一个重要的操作,如果连接两个字符串,运行时间与字符串的长度成正比。很多新手使用Java编程时,错把连接字符串当做是常数时间的操作,而实际上并不是。operation: string concatenationexample: s + tnanoseconds: c*N原创 2017-06-18 17:16:43 · 1750 阅读 · 0 评论 -
算法第4版(谢路云译)学习笔记(4) -- 二分法查找算法的分析解释
public static int binarySearch(int[] a, int key) { int lo = 0, hi = a.length-1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid - 1; else if (key < a[mid]) l原创 2017-06-18 17:56:12 · 481 阅读 · 0 评论 -
知其所以然(1)(2)(3)(关键词:算法)
知其所以然(以算法学习为例)知其所以然(续)知其所以然(三):为什么算法这么难?转载 2018-02-12 12:46:19 · 232 阅读 · 0 评论 -
最长回文子字符串算法
我的代码:def h2(text): text = text.lower() for i in range(len(text)): for j in range(i+1, len(text)-i-1): if text[i:j] != text[i:j:-1]: ...原创 2018-05-22 09:19:32 · 873 阅读 · 0 评论 -
Python 字典的实现
Python dictionary implementationThis post describes how dictionaries are implemented in the Python language.Dictionaries are indexed by keys and they can be seen as associative arrays. Let’s add 3...转载 2018-06-06 10:40:25 · 328 阅读 · 0 评论 -
合并 2 个有序列表(关键词:有序列表/有序/合并/归并)
合并 2 个有序列表递归算法略非递归算法实现def merge(a, b): A = 0 B = 0 res = [] while A <= len(a)-1 and B <= len(b)-1: if a[A] <= b[B]: ...原创 2018-12-08 14:57:05 · 1261 阅读 · 0 评论 -
列表去重(关键词:列表/去重/去除/除去/删除/移除/重复)
用集合去重>>> li1[5, 6, 4, 5, 7, 3, 6]>>> li2 = list(set(li1))>>> li2[3, 4, 5, 6, 7]去重并保持原有的顺序用 sort 和 key>>> li2[3, 4, 5, 6, 7]>>> li2.sort(key=原创 2018-12-08 11:38:04 · 2538 阅读 · 0 评论 -
斐波那契数列/兔子数列/台阶问题/变态台阶问题(关键词:斐波那契数列/兔子数列/台阶问题/变态台阶问题/动态规划)
0, 1, 1, 2, 3, 5, 8, 13......递归算法:def fib_recur0(n): if n==0: return 0 elif 1 &amp;lt;= n &amp;lt;= 2: return 1 else: return fib_recur...原创 2018-12-07 20:47:29 · 1151 阅读 · 0 评论 -
排序算法之堆排序(关键词:数据结构/算法/排序算法/堆排序)
假定:有 1 个乱序的数列 nums ,其中有 n 个数。要求:排好序之后是 从小到大 的顺序。堆排序算法原理先将原始的堆,调整为最大堆:从倒数第 1 个有子结点的结点(下标为 index = n//2 - 1)开始,将以结点 index 为根结点的子堆调整为最大堆;index 范围是 n//2 - 1(含) 到 0(含);最后,原始的堆调整为最大堆。将最大堆调整为(从小到...原创 2018-12-05 10:36:05 · 436 阅读 · 0 评论 -
排序算法之选择排序(关键词:数据结构/算法/排序算法/选择排序)
假定:有 1 个乱序的数列 nums ,其中有 n 个数。要求:排好序之后是 从小到大 的顺序。选择排序算法代码from swap import swapdef select_sort(nums): n = len(nums) i = 0 while i &lt;= n-2: minIndex = i j = i+1 while j &lt;= n-1: ...原创 2018-11-08 12:18:28 · 282 阅读 · 0 评论 -
排序算法之插入排序(关键词:数据结构/算法/排序算法/插入排序)
假定:有 1 个乱序的数列 nums ,其中有 n 个数。要求:排好序之后是 从小到大 的顺序。插入排序算法代码def insert_sort(nums): for i in range(1, len(nums)): itemToInsert = nums[i] j = i while j&amp;amp;gt;=1 and itemToInsert&amp;amp;lt;nums[j-1]: num...原创 2018-11-06 16:41:38 · 1139 阅读 · 0 评论 -
排序算法之冒泡排序(关键词:数据结构/算法/排序算法/冒泡排序)
假定:有 1 个乱序的数列 nums ,其中有 n 个数。要求:排好序之后是 从小到大 的顺序。冒泡排序算法代码def bubble_sort(nums): for i in range(len(nums)-1): for j in range(0, len(nums)-i-1): if nums[j] &amp;amp;amp;amp;gt; nums[j+1]: nums[j], nums[j+...原创 2018-11-03 23:59:25 · 717 阅读 · 0 评论 -
算法与数据结构(2) -- 二叉树深度优先遍历和广度优先遍历
原文链接:http://www.cnblogs.com/zhangbaochong/p/5492877.html 对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。以上面二叉树为例,深度优先搜索的顺序为:ABDECFG。怎么实现这个顺序呢 ?深度优先搜索二叉树是先访问根结点,然后遍历左子转载 2017-05-31 21:43:11 · 582 阅读 · 0 评论