gpt4 book ai didi

c# - 字节数组操作 - 面试问题

转载 作者:行者123 更新时间:2023-12-01 17:36:52 25 4
gpt4 key购买 nike

我正在和我的 friend 讨论这个问题,他在采访中被问到了这个问题。问题是这样的。编写一个函数,它接受一个字节数组(二维)和一个整数 n 作为输入,初始假设是 M*N 字节数组的所有元素都为零,问题是用值填充“n”个字节数组元素1,例如,如果 M=5 且 N=5 并且 n 值为 10,则 Byte 数组应有 10/25 个元素为 1,其余 15 个值为 0。填充的值应是随机的,并且为一个单元格字节数组中应该只填充一次。我很想尝试自己解决这个问题。我已附上到目前为止我所想出的代码。

public Boolean ByteArrayFiller(int a,int b, int n)
{
int count = n;
int iLocalCount = 0;
byte[,] bArray= new byte[a,b];
for (int i = 0; i <a; i++)
for (int j = 1; j <b; j++)
bArray[i, j] = 0;

Random randa= new Random();
int iRandA = randa.Next(a);
int iRandB = randa.Next(b);

while (iLocalCount < n)
{
if (bArray[iRandA, iRandB] == 0)
{
bArray[iRandA, iRandB] = 1;
iLocalCount++;
}

iRandA = randa.Next(a);
iRandB = randa.Next(b);
continue;
}
//do
//{
// //iRandA = randa.Next(a);
// //iRandB = randa.Next(b);
// bArray[iRandA,iRandB]=1;
// iLocalCount++;

//} while (iLocalCount<=count && bArray[iRandA,iRandB]==0);

return true;
}

我编写的代码是用 C# 编写的,但很容易理解。它能够完美地实现问题的目的(我做了一些试验,结果正确),但我在 C# 中使用了 Random 对象(相当于 Java 中的 Math.Rand)来填充字节数组,我一直在想如果Rand 对 a 和 b 返回相同的值。这种情况很有可能无限期地持续下去。这就是提问的目的吗?或者我针对这个问题提出的解决方案是否足够好!

我很好奇这里的专家是如何解决这个问题的?我只是在寻找新的想法来扩大我的视野。任何指示将不胜感激。感谢您花时间阅读这篇文章!

最佳答案

while 循环尝试随机位置直到找到一个好的位置通常是一种非常糟糕的方法。如果 n = M*N,则最后一个找到匹配项的概率为 1/(M*N)。如果 M*N 足够大,效率可能会非常低。

如果 M*N 不太大,我会创建一个 M*N 大小的临时数组,用数字 0 到 (M*N)-1 填充它,然后对其进行排列 - 即,您遍历它并将当前值与随机的其他值交换。

然后转到数组中的前 n 个元素并设置适当的单元格。 (行 = 值/列,列 = 值 % 列)。

关于c# - 字节数组操作 - 面试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5411716/

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