算法设计与分析
文章平均质量分 77
东风依旧
这个作者很懒,什么都没留下…
展开
-
删除字符串中的非字母字符并压缩字符串
要求:将一个字符串中的非字母字符删除,并将字符串压缩,如字符串12work34hard12处理后为workhard。 算法不能用类似c语言的库函数,如strlen等,也不能开辟新空间,要在原字符串上进行操作。思路:依次遍历字符串中字符,若为字母字符,就将其复制到原字符数组中,不是字符数组,就跳过。 遍历时用两个指针,一个指针遍历字符串中的所有字符,另一原创 2013-09-23 23:47:25 · 2085 阅读 · 0 评论 -
计算字符串距离
字符串距离 指对于两个字符串,可以通过增加,减少或删除方式来使得两个字符串相等,执行增加,减少或删除的最少次数即为两个字符串之间的距离。如“workhard”和“workhrrd”两个字符串就可以通过修改第二个字符串中的字符'r'为'a'来使两个字符串相等,此时两个字符串的距离为1思路 可以利用动态规划(参考《编程之美》),并用一个二维数组record[l原创 2013-09-22 10:10:44 · 932 阅读 · 0 评论 -
字符串移位包含问题
问题描述: 给定两个字符串S1和S2,要求判定S2是否能够被S1做循环移动得到的字符串包含。如S1=AABCD和S2=CDAA,则S1循环移动后包含S2,返回true;S1=ABCD和S2=ACBD,则S1循环移动后不包含S2,返回false 解题思路: 1)可以发现,S1循环移动后的结果肯定包含在字符串S1+S1中,所以可以直接判断S2是否包含在字符串S1+S1中原创 2013-09-20 14:22:06 · 848 阅读 · 0 评论 -
二分查找
1. 这里查找的数组是非降序的,数组array,待搜索元素data 1) 在数组array中找出等于data的最小的元素下标; 2) 在数组array中找出等于data的最大的元素下标 3) 在数组array中找出大于data的最小的元素小标 参考:《编程之美》 代码如下:/** 二分查找 * @author MWD * 20原创 2013-09-18 11:25:28 · 523 阅读 · 0 评论 -
求一个数组的中位数时间复杂度为O(n)
基本思路:中位数就是排序后下标为数组长度/2的元素 这里,可以采用快速排序的思路(详细快速排序不多介绍,可参考这里)。即将不断地划分为左右两个区域,左边区域内的所有元素都小于某个主元,右边区域内的元素都大于某个主元。如果划分左右区域的分界j(这里的j和快速排序中的j的含义一致)刚好等于length/2,那么就找到了中位数,否则,如果下标 jlength/2,那么就继续在左边原创 2013-09-11 16:01:30 · 4152 阅读 · 0 评论 -
判断一个数据序列是否是BST后序遍历的结果
基本知识:1)BST:二叉排序树,即父节点大于左子节点,小于等于右子节点2)后序遍历: 先遍历左子树,再遍历右子树,最后遍历根节点基本思想:后续遍历得到的数组的最后一个元素为根节点,前一部分为左子树,后一部分为右子树 前一部分中的元素都小于root(根),后一部分中的元素都大于root(根) 所以可原创 2013-09-07 17:01:37 · 920 阅读 · 0 评论 -
两个子数组有序,融合后依然有序
/** * array[0.mid-1]和array[mid,num-1]分别有序,merge后array[0,num-1]之后任然有序 */package test;import java.util.*;public class Merge { /** * 依次比较array[0,mid-1](用i表示递增)和array[mid,num-1](用原创 2013-09-04 10:53:00 · 597 阅读 · 0 评论 -
实现一个栈,获取其中最大元素,获取时间复杂度为O(1)
/** * 实现一个栈,获取其中最大元素,获取时间复杂度为O(1) * @MWD * Date:2013-9-4 * * Reference: http://www.cnblogs.com/pangxiaodong/archive/2011/08/12/2136260.html */package test;import java.util.*;p原创 2013-09-04 15:56:11 · 1935 阅读 · 0 评论 -
最大堆和利用堆排序
最大堆性质:1)父节点大于等于它的两个子节点,根节点在整个堆中最大2)堆中以每个子节点为根节点的子堆亦满足最大堆性质利用最大堆和最小堆能很方便的求取类似TOP K问题,建堆和调整满足最大(小)堆性质的时间复杂度为O(logn),该方法在海量数据处理有很好的利用价值。/** * 建立最大堆,并利用它进行排序 */package test;import原创 2013-09-07 10:07:13 · 565 阅读 · 0 评论 -
REST API 并发控制
对请求做并发限制是在后端处理能力有限的情况下,防止因某单一用户大量请求将服务器资源暂满导致无法响应其他用户请求的安全保护措施。常见的并发限制方法就是限制用户在某一段时间内的请求数目,如100r/s,即限制用户1s内最多请求100次,超过就拒绝访问。下面介绍几种常见并发控制的实现方法。1. memcache/redismemcache和redis等nosql的提供了以下两个特性,可以很好的支持对请求进原创 2016-09-17 21:32:56 · 8105 阅读 · 0 评论