![]() |
1
1
也许不是最有效的,但在你所使用的有限价值范围内也不应该太差:
|
![]() |
2
1
你只需要搜索你的数据就可以得到你想要的。拆分分隔符上的输入,如果是“,”。然后以某种方式进行排序,这样可以确保从当前位置向左搜索时的安全性。取第一个元素,检查它是否是一个范围,并使用该范围内的最高数字(1-3范围中的3个,如果3是单个元素,则为3个)进行进一步比较。然后取列表中的第二个元素,检查它是否是最后一个元素的直接继承者。如果是,将第一个和第二个元素/范围组合到新范围。重复。 编辑:我不确定PHP,但是对于这个问题,正则表达式有点过分了。只需在你的爆炸阵列中寻找一个‘-’,你就知道它是一个范围。对exp.array进行排序可以保护您的回溯,保护您使用$prev所做的事情。您还可以在“-”上分解分解数组中的每个元素,并检查结果数组的大小是否为>1,以了解元素是否为范围。 |
![]() |
3
1
从算法的角度来看这个问题,让我们考虑一下您对这个问题所施加的限制。所有数字将从1-31开始。列表是“范围”的集合,每个范围由两个数字(开始和结束)定义。对于开始是大于、小于还是等于结束没有规则。 由于我们有一个任意大的范围列表,但是有一个确定的排序/组织方法,分而治之的策略可能产生最好的复杂性。 起初,我输入了一个非常长和仔细的解释,说明了我是如何在这个算法中创建每个步骤的(分割部分、征服药剂、优化等),但是解释却非常长。为了缩短时间,下面是最后的答案:
这应该(理论上)适用于任意长度的任意正整数数组。负整数会被绊倒,因为
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |