我是 Perl 的新手,我在 Perl 中设计某个函数时遇到了麻烦。
该函数应该找到并返回所有增加和减少的条带。这意味着什么?如果两个位置是相邻数字,则它们是邻居。即(2,3)或(8,7)。增加的地带是增加的邻居地带。即(3,4,5,6)。递减带的定义类似。在每个数组的开头添加一个 0,在末尾添加数组的长度+1。没有邻居的单个数字正在减少。0 和 n+1 正在增加。
所以如果我有数组 (0,3,4,5,9,8,6,2,1,7,10) 我应该得到以下结果: 增加条是:(3,4,5) (10) (0) 递减条是:(9,8), (6), (2,1) (7)
我试图将问题减少到只得到所有递减条,但据我所知:http: //pastebin.com/yStbgNme
代码在这里:
sub getIncs{
my @$bar = shift;
my %incs;
my $inccount = 0;
my $i=0;
while($i<@bar-1){
for($j=$i; 1; $j++;){
if($bar[$j] == $bar[$j+1]+1){
$incs{$inccount} = ($i,$j);
} else {
$inccount++;
last;
}
}
}
//edit1:我找到了一个包含上述函数 getStrips() 的 Python 程序,但我的 Python 充其量只是零星的。http://www.csbio.unc.edu/mcmillan/Media/breakpointReversalSort.txt
//edit2: 每个数字恰好是数组中的一个时间所以不能有重叠。