我们有五个不同的数字。写下三个最大数字的总和。 1 <= x <= 10000 我尝试用if else编写if else,但这不是很节省时间。之后,我尝试在if(a> b && b> c等)等其他语句中编写更多语句,但这也确实很慢,因为我需要编写很多内容。
答案 0 :(得分:3)
答案 1 :(得分:1)
Manually order the first three to highest, middle, lowest
Compare the 4th with the lowest, and either
discard 4th
or
discard lowest
compare with middle to select new lowest from 4th or middle
Compare 5th with new lowest, and either
discard 5th
or
discard lowest
add up the 3 numbers
与第4个数字相加时,与任何排序算法相比,这节省了1个运算,其中第4个数字高于前3个数字中的最高数字,因为前3个数字中的最高数字永远不会被其他2个数字丢弃。
进一步避免了使用排序算法插入第5个数字,但这还是很明显的。
在第一个子句中将Compare 5th子句写入3次意味着数据处理量略少,但代码更多:
Compare the 4th with the lowest, and either
(discard 4th)
Compare 5th with lowest, and either
add up 5th middle, highest
or
add up lowest middle highest
or
compare with middle to select new lowest from 4th or middle
(4th)
Compare 5th with 4th, and either
add up 5th middle, highest
or
add up 4th middle highest
or
Compare 5th with middle, and either
add up 5th, 4th, highest
or
add up 4th middle highest
另一种选择是考虑要丢弃的两个条目,而不是保留的三个条目:
Order the first 2 entries to higher and lower
If 3rd entry is lower than higher
If 3rd is lower than lower
lower -> higher ; 3rd -> lower
else
3rd -> higher
If 4th entry is lower than higher
If 4th is lower than lower
lower -> higher ; 4th -> lower
else
4th -> higher
If 5th entry is lower than higher
5th to higher
Sum all the entries except lower and higher,
or sum /all/ the entries then subtract lower and higher
对于要尝试或保留的大量条目,规范的方法是维护具有正确数量要保留的元素的堆。当考虑下一个元素时,将其与堆头进行比较,如果“更好”,则“重估”堆头并将其冒泡到正确的位置。 “重估/气泡头”通常不是堆管理代码的标准功能,但易于实现,比删除旧的头然后插入新的节点要快。