【发布时间】:2011-10-08 08:42:36
【问题描述】:
这是我要解决的问题(这是一个示例问题,不是真正的问题):
给定 N 个数字,[N0 和 K
输入格式:第一行包含 N 和 K(整数)。第二行包含 N 集合的编号。确保所有 N 个数字都是不同的。 输出格式:一个整数表示具有的数字对的数量 一个差异K。
Sample Input #00:
5 2
1 5 3 4 2
Sample Output #00:
3
Sample Input #01:
10 1
363374326 364147530 61825163 1073065718 1281246024 1399469912 428047635 491595254 879792181 1069262793
Sample Output #01:
0
我已经有了一个解决方案(但我无法像我希望的那样优化它)。目前,我的解决方案在运行时获得了 12/15 的分数,我想知道为什么我不能获得 15/15(我对另一个问题的解决方案效率不高,但是得到所有的分数)。显然,代码是使用“Mono 2.10.1, C# 4”运行的。
那么有人能想出更好的方法来进一步优化吗? VS 分析器说要避免调用 String.Split 和 Int32.Parse。对 Int32.Parse 的调用无法避免,尽管我想我可以优化对数组的标记。
我目前的解决方案:
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace KDifference
{
class Solution
{
static void Main(string[] args)
{
char[] space = { ' ' };
string[] NK = Console.ReadLine().Split(space);
int N = Int32.Parse(NK[0]), K = Int32.Parse(NK[1]);
int[] nums = Console.ReadLine().Split(space, N).Select(x => Int32.Parse(x)).OrderBy(x => x).ToArray();
int KHits = 0;
for (int i = nums.Length - 1, j, k; i >= 1; i--)
{
for (j = 0; j < i; j++)
{
k = nums[i] - nums[j];
if (k == K)
{
KHits++;
}
else if (k < K)
{
break;
}
}
}
Console.Write(KHits);
}
}
}
【问题讨论】:
-
不注册我们看不到这个问题。您能否发布您的评分标准?
-
是的,对不起。我以为它对所有人开放。具体评分标准没有公布,但代码经过了一堆测试运行。
-
你会因为速度慢而扣分吗?还是因为错了?还是两者兼而有之?
标签: c# optimization