旋转数组的查找问题。从头开始扫一遍,O(N)的复杂度,一般也能过,甚至先排序以下,再二分都能过。不过这道题的目的当然不在于此。
想一下旋转之后对我们的查找产生了什么影响。如果没旋转过,我们直接比较target与A[middle]的大小,然后总能非常确定的丢掉源数组的一半,即把搜索空间减半,但是旋转之后,只根据A[middle]是确定不了下一轮的走向的,因为即使A[middle]比target大,...
分类:
其他好文 时间:
2014-05-12 15:25:32
阅读次数:
231
迭代法(Iteration)也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。...
分类:
其他好文 时间:
2014-05-12 14:56:47
阅读次数:
297
接着上一篇,同样是旋转数组中查找问题。如果这个数组有重复元素怎么办呢?会有什么影响?
我举一个极端的例子,假设数组中的元素是这样的,1,1,2,1,1,1,1,我们要在这个数组中查找2,一开始的A[middle]=1,发现比target小,那我们就看看A[0]和A[N],发现都跟A[middle]相等,那么这个2到底在哪一半中?只有上帝知道,如果他老人家真的存在的话。这种时候我们怎么办呢?没有其...
分类:
其他好文 时间:
2014-05-12 14:45:35
阅读次数:
278
原题地址:http://oj.leetcode.com/problems/binary-tree-postorder-traversal/题意:实现后序遍历。递归实现比较简单,非递归实现。解题思路:这道题的迭代求解比先序遍历和后序遍历要麻烦一些。假设一棵树是这样的:
...
分类:
编程语言 时间:
2014-05-12 08:13:39
阅读次数:
336
转自:http://zh.lucida.me/blog/on-learning-algorithms/关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。原文...
分类:
其他好文 时间:
2014-05-12 07:26:28
阅读次数:
488
首先,你要对快速排序的思想有一定的了解,先看快速排序的代码。...
分类:
编程语言 时间:
2014-05-11 14:06:30
阅读次数:
338
输入n个数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8
这8个数,则最小的4个数是1,2,3,4.解法一:O(n)的算法,只有当我们可以修改输入数组时可用解法二:O(nlogk)的算法,特别适合处理海量数据
分类:
其他好文 时间:
2014-05-11 12:58:51
阅读次数:
242
这个问题是01背包,而对于编程之美那道是完全背包问题,在编程之美中也有一个0,1背包问题。
而且是容量是小于等于,不是等于,对于是否等于,在初始化参数时候不一样,不小于全部初始化为0,恰好等于,初始化为无穷大,除了0.问什么呢?看算法入门竞赛那本,
背包问题其实不是很好理解,但是代码最终形式很简单,...
分类:
其他好文 时间:
2014-05-11 06:48:30
阅读次数:
246
通过二叉树的中序和后序遍历序列构造二叉树的非递归实现方法...
分类:
其他好文 时间:
2014-05-11 04:42:17
阅读次数:
305
快速排序是基于分治思想的一种排序算法,就像该方法的名字一样,速度比较快,所以叫做快速排序;它的平均时间复杂度为O(N*logN),最坏时间复杂度为O(n2),由于快速排序在序列元素数量多的时候速度比较快,所以很多语言内置的排序方法也是用快速排序实现的。快速排序也有很多优化的版本,比如在排序时基数的选...
分类:
其他好文 时间:
2014-05-10 23:46:39
阅读次数:
553