- 论坛徽章:
- 0
|
本帖最后由 afukada 于 2013-04-17 23:11 编辑
先確定一下我沒有搞錯你想要求的結果:
比方說array=( 2,4,7,8 )
所以你想找的是:
以( a,b )=( 3,6 )為例
| |2| |4| |7| |8| |
a可以在的位置 a
b可以在的位置 b
以( a,b )=( 3,8 )為例
| |2| |4| |7| |8| |
a可以在的位置 a
b可以在的位置 b b b
如果是這樣子
首先除了在array中有和a值相等的數字
否則a就只有一個位置
比方說array=( ...,3,3,3,... )<=array已經經過排序
那這裡如果a=3
有4個可以選擇的位置(就是4個逗號的地方)
所以我想到下面的想法:
先將a,b加入array進行排序
以( a,b )=( 3,6 ), array=( 2,4,7,8 )
a,b加入array排序後可得
( 2,3,4,6,7,8 )
將a,b範圍內的部分截取出來
( 3,4,6 )
element的個數扣除掉a及一個element=>即element個數-2為b可以在的位置<3-2=1>
然後將等於a的部分截取出來
( 3 )=>這裡的element個數為a可以在的位置<=1>
所以可以得到( pos_a,pos_b )=( 1,1 )
同理:
( a,b )=( 3,8 ), array=( 2,4,7,8 )
( 2,3,4,7,8,8 )
( 3,4,7,8,8 )=><5-2=3>
( 3 )=><=1>
所以可以得到( pos_a,pos_b )=( 1,3 )
下面是code- @array=(2,4,7,8);
- ($pos_a,$pos_b)=chaxun(3,6,@array);
- print "$pos_a,$pos_b\n";
- ($pos_a,$pos_b)=chaxun(3,8,@array);
- print "$pos_a,$pos_b\n";
- sub chaxun($,$,@)
- {
- my ($lower,$upper,@array)=@_;
- my @grep_array=grep{$_>=$lower&&$_<=$upper}sort{$a<=>$b}($lower,$upper,@array);
- return (scalar(grep{$_==$lower}@grep_array),scalar(@grep_array)-2);
- }
复制代码 還有考慮a,b連在一起
比方說array=( 2,5,7,8 ),( a,b )=( 3,4 )
這樣子你要怎麼定義? |
|