基础算法
技术宅zch
新时代农民工,IT搬砖狗
展开
-
Trie树——字典树
简介Trie树又称字典树(前缀树),常用在搜索场景下。用于判断一个词汇或者文本是否出现在已有的记录中。利用Trie树记录一个词表,判断文本中的词汇是否出现在词表中。这个应用中使用Trie树可以提高整体的检索效率。实现通常Tire树的实现需要完成三部分:Trie树中插入词汇从Trie树中检索词汇从Trie树中判断是否有给出的前缀字符串代码class Trie(object): def __init__(self): self.lookup = {} # 可以理解为是根节点 d原创 2021-10-10 18:49:24 · 250 阅读 · 0 评论 -
面试必考字符串相关的动态规划——最大公共子序列、最大公共子串、编辑距离
字符串相关的动态规划最大公共子序列最大公共子串编辑距离简述这三个算法解决的问题和展示状态转移方程并且给出可通过执行的Python代码。最大公共子序列子序列是,一个字符串中的任意字符组成的序列,重点在于,不要求子序列是原字符串的连续序列。如下例子所示,acg是abcdefg的子序列,但不是连续子序列。 abcdefg ==> acg两个字符串的最大公共子序列的状态转移方程式如下...原创 2020-04-21 15:07:09 · 379 阅读 · 0 评论 -
面试常考算法——查找类算法
查找算法1.二分查找升级版1.二分查找升级版查找出第一个下标和最后一个下标def helper(nums,target,left): start = 0 end = len(nums) while start < end: mid = (start + end) // 2 if nums[mid] > target or(l...原创 2019-10-22 13:35:22 · 235 阅读 · 0 评论 -
2019年8月28日——leetcode
716.特殊的二进制序列https://leetcode-cn.com/problems/special-binary-string/太难不解,无意义309. 最佳买卖股票时机含冷冻期https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/股票类,另出专题416.分割等和子集...原创 2019-08-28 23:52:38 · 566 阅读 · 0 评论 -
2019年8月26日——leetcode
303. 区域和检索-数组不可变https://leetcode-cn.com/problems/range-sum-query-immutable/class NumArray: def __init__(self, nums: List[int]): self.sum_nums = [0] for ele in nums: ...原创 2019-08-26 22:46:05 · 184 阅读 · 0 评论 -
2019年8月20日——leetcode
938. 二叉搜索树的范围和https://leetcode-cn.com/problems/range-sum-of-bst/class Solution(object): def rangeSumBST(self, root, L, R): def dfs(node): if node: if L <= ...原创 2019-08-20 22:28:21 · 265 阅读 · 0 评论 -
2019年8月19日——leetcode
894.所有可能的满二叉树https://leetcode-cn.com/problems/all-possible-full-binary-trees/# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self...原创 2019-08-19 23:25:59 · 172 阅读 · 0 评论 -
面试常考算法(六)——数组系列
1.求众数找到众数,这个众数出现的次数大于n/2def majority_element(nums):# moore投票法 candidate = None count = 0 for num in nums: if count == 0: candidate = num if num == candidate:...原创 2019-08-09 00:50:43 · 162 阅读 · 0 评论 -
面试常考算法(二)——二叉树的遍历【8种】
二叉树的构造class Node(object): """节点类""" def __init__(self, value=None, left=None, right=None): self.value = value self.left = left self.right = rightclass Tree(object)...原创 2019-05-20 12:51:55 · 339 阅读 · 0 评论 -
面试常考算法(一)——排序类算法
快速排序def quick_partition(my_list, start, end): position = my_list[start] while start < end: while start < end and my_list[end] >= position: # end指针向前移动 ...原创 2019-04-15 10:27:19 · 267 阅读 · 0 评论 -
面试常考算法(五)——树相关算法
树相关的面试题1.树的直径2.树的最大深度3. 判断树的路径和是否为某数1.树的直径distance = 0 # 记录树的深度def dfs(root): if root is None: return 0 left = dfs(root.left) right = dfs(root.right) distance = max(left+right, s...原创 2019-07-11 09:28:25 · 362 阅读 · 0 评论 -
面试常考算法(四)——简单动态规划
动态规划1.最大字序列和2. m*n矩阵的不同路径数1.最大字序列和def max_sub_array(nums): ans = nums[0] sum_ = 0 for ele in nums: if sum_ > 0: sum_ += ele else: ...原创 2019-07-10 23:54:14 · 212 阅读 · 0 评论 -
面试常考算法(三)——链表系列
简单链表操作反转链表# 迭代法def reverse_list(self, head): pre = None cur = head while cur: temp = cur.next cur.next = pre pre = cur cur ...原创 2019-07-10 23:42:42 · 215 阅读 · 0 评论