数二分查找范围这是我的代码:的范围内
SortedDictionary<int,int> Numbers = new SortedDictionary<int,int>();
List<int> onlyP = new List<int>(Numbers.Keys);
int Inferior = int.Parse(toks[0]);
int Superior = int.Parse(toks[1]);
int count = 0;
int inferiorindex = Array.BinarySearch(Numbers.Keys.ToArray(), Inferior);
if (inferiorindex < 0) inferiorindex = (inferiorindex * -1) - 1;
int superiorindex = Array.BinarySearch(Numbers.Keys.ToArray(), Superior);
if (superiorindex < 0) superiorindex = (superiorindex * -1) - 1;
count = Numbers[onlyP[superiorindex]] - Numbers[onlyP[inferiorindex]];
所以我想要做的是这样的:我有一个排序的字典,权力键,和一个正常的迭代的值。我必须打印在指定范围内有多少个键。字典中的一些条目:[1,1],[4,2],[8,3],[9,4],[16,5],[25,6],[ 27,7],[32,8] 限制:2和10 2 - 10中的数字:4,8,9 = 3个数字。
随着BinarySearch我试图快速找到我想要的数字,然后减去Potencias [onlyP [superiorindex]] - Potencias [onlyP [inferiorindex]]找到有多少数字在该范围内。不幸的是,它不适用于所有情况,它有时会给出比实际数量少的数字。这怎么解决?提前致谢。如果我选择极限:4和4 ...它返回0,但答案是1. 限制:1和10^9(整个范围)返回32669 .. 。但答案是32670. 该算法忽略权力。
如有任何问题,我会在这里回答。提前致谢。 – 2012-01-18 15:20:44
对不起,一些代码丢失,只是编辑。 – 2012-01-18 15:24:22
为什么它不只是superiorIndex - inferiorIndex?为什么在代码的最后一行查找字典? – 2012-01-18 15:29:31