這是我解決(這是一個樣的問題,而不是一個真正的問題)問題:優化這個C#算法(K差異)
給定N號,[N < = 10^5]我們需要計數的總對具有K. [K> 0和K < 1E9]
輸入格式的差 數字:第一線包含N個& K(整數)。第二行包含N 這組數字。所有的N號碼都是有保證的。 輸出格式:一個整數話說,沒有數字的對,有 一個diff 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);
}
}
}
我們不能看到PHP的解決方案問題沒有註冊。你能發佈你得分的標準嗎? –
對,對不起。我認爲這對每個人都是開放的。具體的評分標準不會公佈,但代碼需要經過一系列測試。 –
您是否因減慢速度而減分?還是因爲錯了?或兩者? –