gpt4 book ai didi

algorithm - 编码脑筋急转弯以更新数组(与语言无关)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:51:23 24 4
gpt4 key购买 nike

全部,

我需要一个聪明的方法来尽可能快速和干净地实现这个算法(用于工作):我想我已经删除了所有特定于语言的问题并将其归结为:

我有两个数组:A 和 B。

A中有一个名字列表{Apple, Apple, Banana, Banana, Banana, Carrot, ...} 每个第i个值在A中出现的次数没有上限。可以只是一个“苹果”或无数个。

A 中的每个条目在 B 中都有匹配的条目。(多对多映射)。例如:

A[0] = "Apple"      B[0] = "0027"
A[1] = "Apple" B[1] = "0028"
A[2] = "Banana" B[2] = "0073"
A[3] = "Banana" B[3] = "0041"
A[4] = "Banana" B[4] = "0069"

如果 A 中某个条目的实例不超过 100 个(如果有 <= 100 个 Bananas),那么它们必须共享相同的初始“B”值。如果超过 100 个,则前 100 个必须共享相同的 B 值,但接下来的 100 个将具有第 B[i + 100] 个值。

例子如果有102个苹果

A[0]   = "Apple"       B[0]   = "0027"
A[1] = "Apple" B[1] = "0028"
...
A[99] = "Apple" B[99] = "0073"
A[100] = "Apple" B[100] = "0041"
A[101] = "Apple" B[101] = "0069"
A[102] = "Banana" B[102] = "0123"

那么我想要的结果是这样的:

A[0]   = "Apple"       B[0]   = "0027"
A[1] = "Apple" B[1] = "0027"
...
A[99] = "Apple" B[99] = "0027"
A[100] = "Apple" B[100] = "0041"
A[101] = "Apple" B[101] = "0041"
A[102] = "Banana" B[102] = "0123"

我敢肯定有一些 super 大脑可以想出我设计的蹩脚算法,所以让我们看看吧!

编辑 1:我想我应该指出这是为了工作。。我认为这是一个有趣的挑战,有人可能想看看并可能想出比我想出的更好的解决方案。

编辑 2:感谢丹尼尔指出我的愚蠢错误。

我的解决方案只是为了比较(伪代码):

首先创建 B 的散列/字典,称为 d,其中 d[ "Apple"] = A 中 Apple 的实例数。

while (i < A.count)
{
string cmp = A[i];
int v = d[cmp];
int j=i;

while (v--) {
B[j++] = B[i];

if (j %100 == 0)
i += j
}
i+= d[cmp];
}

凭内存做这件事,希望我没有搞砸索引...

最佳答案

就我对问题的理解和假设数组已排序而言,我在 C# 中的建议。

String[] A = GetAs();
String[] B = GetBs();

Int32 count = 0;
Int32 index = 1;

while (index < A.Length)
{
if (A[index] != A[index - 1])
{
count = 0;
}

currentCount++;

if ((A[index] == A[index - 1]) && (count % 100 != 1))
{
B[index] = B[index - 1];
}

index++;
}

如果有人喜欢它紧凑(并且从零开始计数)。

String[] A = GetAs();
String[] B = GetBs();

Int32 c = 0, i = 1;

while (i < A.Length)
{
c = (A[i] == A[i - 1]) ? c + 1 : 0;

B[i] = ((A[i] == A[i - 1]) && (c % 100 != 0)) ? B[i - 1] : B[i];

i++;
}

关于algorithm - 编码脑筋急转弯以更新数组(与语言无关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com