更喜欢数组中的高索引号而不是较低的索引号
Posted
技术标签:
【中文标题】更喜欢数组中的高索引号而不是较低的索引号【英文标题】:prefer high index number than lower one in an array 【发布时间】:2020-02-04 06:21:07 【问题描述】:假设我有这两个具有 5 个单元的 排序 数组:
数组中的数字介于 2 和 14 之间(包括 2 和 14,它们是整数)
现在,当最低的数组是:
[2,2,2,2,2] 最高为 [14,14,14,14,14]
现在问题是:索引很重要,例如,如果我们看一下这些数组:
1) [2,2,2,2,10]
2) [8,8,8,8,9]
所以第一个比第二个好,会得到更高的分数。
如果索引中存在平局(从右到左),例如:
1) [3,4,5,10,13]
2) [3,4,7,10,13]
所以索引号:3 和 4 是相同的,但由于 7 高于 5。所以在这种情况下,第二个数组的分数会更高。
我在数学上苦苦挣扎,我的意思是我想高效地做,现在我可以做这样的事情:
2^array[i] 但效率不高,所以我设法做的主要事情是
double rank = 0;
for (int i = 0; i < 5; i++)
rank += (double)array[i] / 14 + i;
因为如果 array[i] 可以在 2 和 14 之间,所以 1/7
我会很高兴在这里得到一些帮助。
【问题讨论】:
如果你的代码在 c# 中,为什么这个标签是 python? 不清楚您想要实现什么,并且您使用[14,14,14,14,2]
的示例不正确 - 数组未排序
@ingvar 对不起,我修正了这个例子。 DanielMesejo,抱歉,这是一个错误,已经修复。
【参考方案1】:
您实际上是在描述一个以 13 为基数的数字。每个“数字”(数组位置)代表 13 个不同的有序值之一。
您可以通过将数组转换为 5 位、以 13 为底的值来计算排名:
从每个数组元素的值中减去 2 以将元素值标准化为 0..12 范围。 给每个数组元素打分 =(标准化元素值)*(13 的数组索引幂)。 1) 将分数相加。1) 或提升为 Array.Length - 数组索引,取决于数组的哪一侧应该是最不重要的。
【讨论】:
惊人的答案!非常感谢,只有回想起来,我才注意到它确实与基本更改问题及其总和兼容。 出于好奇,这是在线代码挑战吗?它有那种感觉。 实际上我需要它来实现扑克算法,所以高牌比低牌更受欢迎,你给出了非常棒的答案。有时这些“代码挑战”可以在现实世界的代码中实现,再次感谢。 这就是为什么 base 13 感觉有点熟悉......几年前我自己写了扑克算法:-)以上是关于更喜欢数组中的高索引号而不是较低的索引号的主要内容,如果未能解决你的问题,请参考以下文章
在任何情况下,您更喜欢较高的大 O 时间复杂度算法而不是较低的时间复杂度算法?