【发布时间】:2017-10-19 18:20:33
【问题描述】:
给定两个这样的整数数组:-
int[] a = { 2, 6, 10, 13, 17,18 };
int[] b = { 3, 7, 8, 9, 11, 15 };
我怎样才能从这两个数组中找到对,这样当它们相乘时变成完美的正方形?
例如,在上述数组中,{2,8} 和 {18,8} 是两对。
现在我的方法是蛮力,我正在循环遍历两个数组,如下所示:-
int count = 0;
for (int i = 0; i < arr1.Length; i++)
{
for (int j = 0; j < arr2.Length; j++)
{
var x = arr1[i] * arr2[j];
long s = (long)Math.Sqrt(x);
if (x == s * s)
count += 1;
}
}
我怎样才能有效地做到这一点?
【问题讨论】:
-
这似乎更像是一场考试/比赛,但我们会尽力提供帮助,因为您提供了代码......
-
分解可能吗?
-
@matiaslauriti - 正确,面试问题。我不擅长来自非 CS 背景的算法:(
-
我不会使用
Math.Sqrt()方法来确定“完美的正方形”。请看this问题。有一个很好的答案解释了一种快速的方法。不过它是 java,但在 C# 世界中移动它应该不是问题。
标签: c# arrays algorithm perfect-square