算法
藏獒的自述
这个作者很懒,什么都没留下…
展开
-
归并排序代码实现
由于所选weiss教材上的归并算法p175比较复杂,各个函数之间相互调用导致逻辑混乱,索性自己写了一个int *mergeSort(int *a, int N) { int *reArray = new int[N]; int *temp1,*temp2; int i = 0, j = 0, k = 0; int length1,length2; if(1 == N) { reArr原创 2015-05-05 10:19:09 · 459 阅读 · 0 评论 -
算法好博文
http://www.cnblogs.com/figure9/archive/2014/05/05/3708351.html原创 2015-08-16 22:32:01 · 383 阅读 · 0 评论 -
LeetCode(220) Contains Duplicate III
基本原理是:将扫描过的最后k个元素(在一开始时,二叉查找树的大小是由1变化到k,然后保持k不变)放入二叉查找树这个有序的数据结构,利用其两个成员函数set1.lower_bound(nums[i]);set1.upper_bound(nums[i]);lower_bound(nums[i]) : 大于等于nums[i]的第一个元素。 upper_bound(nums[i]):大于nums[i]的原创 2015-08-16 14:42:34 · 282 阅读 · 0 评论 -
什么情况用递归
依赖于相同形式的问题的解,比如LeetCode(98) 验证一棵树是否为二叉搜索树: 一棵树是否为二叉搜索树取决于左子树是否为二叉搜索树,右子树是否为二叉搜索树,以及左右的最大最小值与根节点值的大小关系。这里的左右子树是否为二叉搜索树就是相同形式的问题的解。与动态规划有些许不同,动态规划的第一步是做出选择。编程时,我们会想着这个函数的功能。向深处搜索:比如我们常见的深度优先搜索,我们在编程是关注的原创 2015-08-05 20:12:09 · 641 阅读 · 0 评论 -
二分查找组件
int minusTwoSearch(vector<int> &nums, int start, int end, int target) { if(nums[start] == target) return start; if(nums[end] == target) return end; while(end原创 2015-08-03 16:27:49 · 323 阅读 · 0 评论 -
算法武器
正规的算法:DFS,回溯,分治,BFS,动态规划。。。使用数据结构的算法: map, set, stack, queue。。。轻功算法:将扫描过的元素保存到某种数据结构以达到某种目的; 各种双指针算法 滑动窗口法 模拟算法(常用于链表)。。。原创 2015-08-17 09:22:00 · 398 阅读 · 0 评论 -
LeetCode(221) Maximal Square
题目:Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing all 1’s and return its area.For example, given the following matrix:1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0Ret原创 2015-08-10 21:53:25 · 1280 阅读 · 0 评论 -
算法设计技巧
算法设计技巧 1:先定位大范围,再定位小范围。算法设计技巧 2:将一些信息记录下来,最后根据这些信息执行一系列改变实体的操作。原创 2015-07-28 12:39:48 · 566 阅读 · 0 评论 -
对递推和递归的理解
对递推和递归的理解1.此问题能否用递推解决我们以斐波拉契数列问题为例进行阐述,斐波拉契数列为0、1、1、2、3、5、8、13、21、…表现斐波拉契数列为瘦柱状图的形式,如下 我们现在所要解决的问题是求取第n个位置的数值,下面我们正式开始考虑能否用递推解决这个问题(关于递推和递归的区别,将会在下文阐述): 我们考察3号位置,我们发现3号位置的值依赖于1号位置和2号位置,即在1号位置的值和2号位原创 2015-06-13 11:15:53 · 5210 阅读 · 1 评论 -
2015/10/06写下的归并排序、快速排序、二分查找
#include<iostream>using namespace std;void merge(int a[], int start, int middle, int end){ int index1 = start; int index2 = middle + 1; int * buffer = new int[end - start + 1]; int co原创 2015-10-06 20:56:00 · 547 阅读 · 0 评论