Rancho

爱和死亡留给上帝

算法进阶(07) - DFS、BFS

Adcanced Algoritm - DFS & BFS

DFS VS BFSDFS更适合搜索树形状态空间 递归本身就会产生树的结构 可以用一个全局变量维护状态较为复杂的信息(子集/排列) 不需要队列, 节省空间 BFS适合求最小代价、最少步数之类的题目 BFS是按层次序搜索, 任意时刻队列中至多只有两层 在状态空间为一般的图时(需要判重), DFS/BFS均可 实战电话号码的字母组合LeetCode 给定一个仅包含数字 2-9 的字符串,......

算法进阶(06) - 树、图

Advanced Algorithm - Tree And Graph

树二叉树的中序遍历LeetCode 12345678910111213141516171819202122/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func ......

算法进阶(05) - 递归、分治

Advanced Algorith - Recursion And Divide

基础知识递归的时间复杂度 指数型: k^n (子集, 大体积背包问题) 排列型: n! (全排列, 旅行商, N皇后) 组合型: n!/(m!(n-m)!) (组合选数) 递归子集LeetCode 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 解题思路按数组index递归找出子集, 把找......

算法进阶(04) - 哈希、集合、映射

Advanced Algorithm - Hash/Set And Map

基础知识哈希表的原理哈希表(Hash Table)又称散列表, 是一种可以通过关键码(key)直接进行访问的数据结构. 它由两部分组成 一个数据结构, 通常是链表、数组 Hash函数, 输入关键码, 返回对应数据的索引 对外表现可以通过关键码直接访问, 如 hash_table[key] = value实际上是对key进行了一次哈希运算之后, 从数据结构中定位到value dat......

Redis中的高性能IO模型

IO Module In Redis

本文主要探讨一个Redis中的经典问题: 为什么单线程的Redis能这么快? 首先, 要厘清一个事实, 我们通常所说的Redis是单线程, 主要是指Redis的网络IO和键值对读写都是由一个线程来完成的. 而Redis的其他功能, 比如持久化、异步删除、集群数据同步等, 其实是由额外的线程执行的. 所以, 严格来说Redis并不是单线程的 Redis为什么用单线程多线程的开销日常写程序, 经......

算法进阶(03) - 前缀和、差分、双指针扫描

Advanced Algorithm - Prefix-sum And Double Pointer Scanning

前缀和对于一维数组A 前缀和数组: S[i] = S[i - 1] + A[i] 字段和: Sum[l, r] = S[r] - S[l - 1] 当A中元素都是非负数时, 前缀和数组S单调递增 统计「优美子数组」LeetCode 给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组......

算法进阶(02) - 栈、队列

Advanced Algorithm - Stack And Queue

时间复杂度栈/队列 push(入栈/入队): O(1) pop(出栈/出队): O(1) access(访问栈顶/访问队头): O(1) 双端队列 队头/队尾的插入/删除/访问, 都是O(1) 优先队列 访问最值: O(1) 插入: 一般是O(logN), 一些高级的数据结构可以做到O(1) 取最值: O(logN) 实战用切片实现栈因为Golang中没有现成的栈可以开箱即用, 这里用......

Redis中的数据结构

Data Structure In Redis

Redis为什么这么快?时至今日, 可以选择的数据库有很多, 为什么Redis能有这么突出的表现呢一方面是因为它是内存数据库, 所有的操作都在内存上完成. 另一方面, 这要归功于它的数据结构.Redis一共支持五种数据类型, 包括String(字符串), List(列表), Hash(哈希), Set(集合)和Sorted Set(有序集合). 而它们的底层实现数据结构其实有六种, 分别是简......

算法进阶(01) - 数组、链表

Advanced Algorithm - Array And List

数组合并两个有序数组LeetCode 给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。 初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。 解题思路nums1有足够空间容纳所有数组元素, 用k从m+n-1处开......

在JUnit中定制Runner

JUnit4 Customer Runners

前言本文将快速介绍如何在JUnit测试框架中使用自定义Runner来运行单测当前, 这需要配合@RunWith注解 准备首先, 添加项目依赖 12345<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version&g......