
算法
文章平均质量分 71
gswen
这个作者很懒,什么都没留下…
展开
-
从JOS源码了解系统调用
首先何为系统调用?根据维基百科的解释:a system call is how a program requests a service from an operating system's kernel. 简意就是用户程序对操作系统内核服务的请求。我们知道用户程序所能做的事情很有限,比如我们不能自己写代码直接操作硬盘,不能自己写代码控制控制台的输入输出等等,那怎么办呢?办法就是请求操作系统帮我们原创 2016-01-16 19:37:04 · 1214 阅读 · 0 评论 -
leetcode 312. Burst Balloons 分析
最近在学习动态规划,因为之前初步看了CLRS上面的动态规划部分,觉得已经有了一定的了解,于是想去leetcode上面刷一下动归部分的题目。说实话,不简单。主要还是自己对动态规划没有理解好。按accept从高到底做,做到burst balloons的时候就卡住了,还是看了discussion才恍然大悟,毕竟太弱。以下是对discussion里面的一篇高赞讲解的粗糙翻译,也是对自己思路的一个梳理。原文翻译 2016-01-22 14:39:04 · 9912 阅读 · 3 评论 -
字符串匹配算法-KMP详解
这两天在看字符串匹配算法,第一次看到KMP算法的时候觉得很难。于是上网搜分析,网上讲KMP的算法很多,只是好像很多都讲的云里雾里的,不甚清晰。后来想想还是找教材看看,第一回看的是《算法》第四版,其实没看懂;于是再找来CLRS看,恍然大悟,果然还是CLRS大法好。本文主要是梳理一下整个思路,尽自己所能讲得尽量清晰易懂。首先先从什么是字符串匹配开始:字符串匹配就是给定一个字符串S,然后在另一个字符原创 2016-01-26 19:19:46 · 755 阅读 · 0 评论 -
求最长回文子串算法分析-Manacher算法
问题描述:给定一个字符串,找出其中长度最长的回文子串。子串意思是给定字符串的连续子集。回文是指正序和倒序表现形式一样的字符串。暴力算法是依次以每个点为中心展开并将对应位置的字符进行匹配,找出最长的子串即可。但是时间复杂度很高。这里介绍一种技巧性比较强的Manacher算法,时间复杂度只有O(n)。Manacher算法核心思想就是利用回文子串的对称性,假如某个中心点p包含在一个长的回文子原创 2016-04-01 17:16:44 · 697 阅读 · 0 评论 -
leetcode 37 Sudoku Solver
class Solution {public: bool safe(vector>&board,int i,int j,int num) { for(int k=0;k<9;++k) { if(board[i][k]==num+'0' || board[k][j]==num+'0')return false;原创 2016-03-10 21:38:53 · 618 阅读 · 0 评论 -
leetcode 215. Kth Largest Element in an Array
题目: Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example,Given [3,2,1,5,6,4] and k = 2,原创 2016-03-13 16:53:49 · 514 阅读 · 0 评论 -
将数组分成两部分,使得这两部分的和的差最小
将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小。思路:这个问题可以转化为求数组的一个子集,使得这个子集中的元素的和尽可能接近sum/2,其中sum为数组中所有元素的和。这样转换之后这个问题就很类似0-1背包问题了:在n件物品中找到m件物品,他们的可以装入背原创 2017-03-25 19:13:56 · 14064 阅读 · 2 评论