问题描述:已知数组a以及若干个查询(x, y),求a[x~y]之间的最小值。
分析
不难发现:若取t使得$2^t\leq y-x+1$且$2^{t+1}>y-x+1$,则有:
$$[x, x+t]\bigcup[y-t+1,y]=[x,y]$$
运用二进制的思想,我们只需预处理出$i~i+2^k-1$之间的最小值,即可快速完成查询。设dp[i][j]为$i~i+2^j-1$之间的最小值,则有:
$$dp[i][j]=min(dp[i][j-1],dp[i+2^{j-1}][j-1])$$。
Code
var
a: array [1..100000] of longint;
dp: array [1..1000
继续阅读 »
最近写了一道数组去重的题,手抖,紧张,没写好。后来写了一会儿觉得还挺有意义的。现在做一下记录
Test case
测试用例如下
import test from 'ava'
import unique from '../src/unique'
继续阅读 »
PHP源码分析 数组分割.
PHP_array_splic()
array array_splice ( array &$input , int $offset int $length = 0 bool $preserve_keys ] ) 有四个参数 第一个是输入数组,第二个是偏移量 ,第三个是截取长度默认是input的长度, 第四个是bool代表返回的数组是否保留之前的key
继续阅读 »
1. 模型选择
对于一组数据集,可能会选择不同的模型。例如:
$$
\begin{array}{}
h_\theta(x)=\theta_0+\theta_1x \
h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2 \
h_\theta(x)=\theta_0+\theta_1x+...+\theta_3x^3 \
h_\theta(x)=\theta_0+\theta_1x+...+\theta_{10}x^{10} \
\end{array}
$$
继续阅读 »
这里收藏工作中用到的脚本,也为了防止做重复的搜索工作,同时分享给大家。
more
数组
初始化数组
shell
name = (value1 value2 ... valuen)
$ A=(a b c d)
$ echo ${A[@]} # 输出所有元素
数组去重
shell
$ array=($(awk -vRS=' ' '!a[$1]++' <<< ${array[@]}))
取得数组元素的个数
shell
$ echo ${#A[@]}
取下标
shell
$ echo ${A[1]} # 从1开始
清除元素
shell
$ unset A
$ echo ${A[@]}
循环取元素
shell
$ fo
继续阅读 »
算法原理
猴子排序 (Bogo Sort) 是个既不实用又原始的排序算法,其原理等同将一堆卡片抛起,落在桌上后检查卡片是否已整齐排列好,若非就再抛一次。其名字源自 Quantum bogodynamics,又称 bozo sort、blort sort 或猴子排序(参见无限猴子定理)。并且在最坏的情况下所需时间是无限的。
伪代码:
javascript
while not InOrder(list) do
Shuffle(list)
done
more
这个排序方法没有办法给出实例分析,下面直接看代码。
JavaScript 语言实现
``` javascript
function bogoSort(array)
继续阅读 »
概述
Partial Application?不要被字面意思误解,这里要说的并不是 Application,而是 JavaScript 中的 function。可以这样来描述 Partial Application,一个接受多个参数的函数,预先给该函数绑定一些参数,并返回一个新的函数来接受剩下未绑定的参数。貌似有点像柯里化(currying)函数,但不尽然。
典型的柯里化函数定义如下:
js
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return fun
继续阅读 »
题目链接: http://oj.leetcode.com/problems/two-sum/
题目内容:
Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your return
继续阅读 »
算法原理
桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。
排序过程:
1. 假设待排序的一组数统一的分布在一个范围中,并将这一范围划分成几个子范围,也就是桶
2. 将待排序的一组数,分档规入这些子桶,并将桶中的数据进行排序
3. 将各个桶中的数据有序的合并起来
Data Structure Visualizations 提供了一个桶排序的分步动画演示。
more
实例分析
设有数组 array = [29, 25, 3, 49, 9, 37, 21, 43],那
继续阅读 »
链接:Link 耗时:0.028s
一道简单的动态规划,主要思路就是:
用f[i,j]表示到达(i,j)的最长路径的长度。找到每个最高点,从其开始向四周的低处搜索。如果该点已搜过并且f值大于当前长度则退出回溯。直到达到某个最低点为止。
不多说了,直接上代码:
```pascal
const
delta :array [1..4, 1..2] of integer = ((-1, 0), (1, 0), (0, 1), (0, -1)); //四个方向向量
var
_: Integer;
name: string;
n, m, i, j, x: Integer;
ans: longint
继续阅读 »