【发布时间】:2015-11-05 04:38:03
【问题描述】:
给定大量整数(超过 1 000 000 个值),找出有多少种方法可以选择其中两个加起来为 0.... 是问题
我所做的是创建一个正随机整数列表:
Random pos = new Random();
int POSNO = pos.Next(1, 1000000);
lstPOS.Items.Add(POSNO);
lblPLus.Text = lstPOS.Items.Count.ToString();
POSCount++;
并创建了负面清单:
Random neg = new Random();
int NEGNO = neg.Next(100000, 1000000);
lstNEG.Items.Add("-" + NEGNO);
lblNegative.Text = lstNEG.Items.Count.ToString();
NegCount++;
要进行我正在使用的总和检查:
foreach (var item in lstPOS.Items)
{
int POSItem = Convert.ToInt32(item.ToString());
foreach (var negItem in lstNEG.Items)
{
int NEGItem = Convert.ToInt32(negItem.ToString());
int Total = POSItem - NEGItem;
if (Total == 0)
{
lstADD.Items.Add(POSItem + "-" + NEGItem + "=" + Total);
lblAddition.Text = lstADD.Items.Count.ToString();
}
}
}
我知道这不是最快的路线。我考虑过使用数组。你有什么建议吗?
【问题讨论】:
-
lstPOS和lstNEG的类型是什么? -
当您将整数放入列表时,我认为您不想将它们转换为字符串。为什么要这样做?
-
lstPOS & lstNEG 是简单的列表框。我已将这些用于视觉表示。当我将它们添加到列表框时,它们仍然是整数。如果我从列表框中提取,它会保留整数形式还是更改为列表框项?
-
不要忘记两个零加起来为零:
0 + 0 == 0;因此,除了正面和负面之外,您还必须将零作为单独的案例来解决。