
算法
yjw19901214
这个作者很懒,什么都没留下…
展开
-
KMP算法
这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP算法解释。 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2.原创 2016-05-31 23:46:43 · 376 阅读 · 0 评论 -
卡特兰数列编程实现(go)
1. 推导公式2.卡特兰数列编程实现方法一:func numTrees(n int) int { if 0 == n || 1 == n { return 1 } G := make([]int, 0) G = append(G, 1) G = append(G, 1) for i:=2; i<=n; i++ { temp := 0 for j:=1; ...原创 2018-11-22 09:50:15 · 345 阅读 · 0 评论 -
LRU Cache(go)
实现方法:采用双向链表和map结构进行实现代码如下:type Node struct { key int value int next *Node pre *Node}type LRUCache struct { capacity int count int head *Node tail *Node hash map[in...原创 2018-11-01 17:40:29 · 172 阅读 · 0 评论 -
求图中两点最短路径(dijkstra) go实现
import ( "testing" "strconv" "fmt")// V - S = Ttype Dijkstra struct { Visit bool // 表示是否访问 Val int // 表示距离 Path string // 路径的显示}const ( INT_MAX = 1<<32 - 1)func getShor...原创 2018-10-24 16:21:55 · 2641 阅读 · 0 评论 -
Min Stack (leetcode 155) go实现
type MinStack struct { Val int Min int Next *MinStack}/** initialize your data structure here. */func Constructor() MinStack { return MinStack{0, 0, nil}}func (this *MinStack...原创 2018-10-26 17:44:26 · 218 阅读 · 0 评论 -
给定一个数组,其中只有一个数出现一次,别的数都出现3次,找出这个数(go)
1.思路用两个数one=0、two=0分别记录bits位上1出现的次数,如果一个数出现一次,则one等于这个数,two=0; 如果一个数出现两次,则two等于这个数, one等于0;如果一个数出现第三次,则one = 0, two = 0 ,three等于这个数。我们以数组{2, 1, 2, 2}为例:初始: one = 0, two = 0 threea. 数字2加入其中,则 ...原创 2018-10-26 16:20:52 · 3987 阅读 · 0 评论 -
leetcode 190: reverse bits (go)
// abcdefgh -> efghabcd -> ghefcdab -> hgfedcbafunc reverseBits(n uint32) uint32 { n = (n << 16) | (n >> 16) n =((n & 0xff00ff00) >> 8) | ((n & 0x00ff00ff) <&...原创 2018-10-29 15:43:30 · 191 阅读 · 0 评论 -
求树中两个节点的最低公共祖先节点(go)
该题目有以下几种情况可以考虑1. 树是二叉搜索树,二叉搜索树的特点是根节点值大于所有左子树节点值,小于所有右子树节点值,则最低公共祖先即该节点值大于给定两个节点中的一个值,小于另外一个节点的值,go代码实现如下type TreeNode struct { Val int Left *TreeNode Right *TreeNode}// 如果树是二叉搜索树func getL...原创 2018-10-22 15:56:44 · 621 阅读 · 0 评论 -
平衡二叉搜索树实现(go)
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sortedArrayToBST(nums []int) *TreeNode { if len(nums) ==...原创 2018-10-17 15:32:19 · 296 阅读 · 0 评论 -
计算两个绝对路径的相对路径(go)
写一个函数计算出两个绝对路径(如path1 = /a/b/c/d, path2 = /a/e/f)的相对路径为 ../../e/ffunc getRelativePath(path1, path2 string) (string, error) { if path1 == "" || path2 == "" { return "", errors.New("绝对路径不可以为空") }...原创 2018-10-19 10:07:32 · 1469 阅读 · 0 评论 -
Rabin-karp算法实现 字符串匹配
// RabinKarp算法实现const primeRK = 16777619func hashStr(seq string) (uint32, uint32) { hash := uint32(0) for _, value := range seq { hash = hash * primeRK + uint32(value) } ...原创 2018-10-12 17:52:17 · 635 阅读 · 0 评论 -
堆排序
#ifndef _HEAP_SORT_#define _HEAP_SORT_/************************************************************************//* 堆排序是利用堆顶这个关键字来进行的,将最后一个元素与堆顶元素进行交换*//* 并去除最后一个元素,重新调整堆,这样依次下去直到堆中只剩走后一个原创 2015-11-06 15:31:21 · 343 阅读 · 0 评论 -
LRU高速缓存算法统计高速缓存请求失败的缺页次数
1. page 表示页面的编号2. max_cache_size表示最大缓存容量3. len表示pages页面数组的大小#include using namespace std;int lruCountMiss(int max_cache_size, int *pages, int len){ int count = 0; int i,j,k,n; boo原创 2016-06-02 20:57:43 · 1053 阅读 · 0 评论 -
给定一个数组,删除其中连续的长度最小的子数组,使剩余的元素升序
func getMinal(nums []int) int { if len(nums) <= 1 { return 0 } end := -1 start := -1 for i := len(nums) - 1; i > 0; i-- { if nums[i] < nums[i-1] { end = i break } } if -1 ...原创 2018-12-03 09:24:56 · 1513 阅读 · 3 评论