我最近花了一個在線編碼測試需要至少招。我獲得了100%的正確性,但0%的表現。我怎麼能寫我的解決方案來獲得更好的性能?我不敢相信我打進0%。如何找到畫天際線隨時間和空間複雜== O(N)
[編碼試驗]
您想油漆使用由配置成一列的矩形建築物的連續水平筆劃天際線。每個水平行程都是一個單位高和任意寬。這些建築都是相同的寬度,但它們可能有不同的高度。天際線形狀以陣列A的形式給出,其元素以連續建築物爲單位指定高度。
例如:
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 3
A[4] = 2
A[5] = 1
收件給定一個非空數組A由N個整數的函數,返回最小數繪製由數組表示的天際線所需的水平筆畫。如果筆劃數超過了1,000,000,000,函數應該返回-1。時間複雜度應該是O(N)。空間複雜度應該超出輸入存儲的O(N)(不包括輸入參數所需的存儲空間)。
public static int solution(int[] A)
{
int largestNumber = 0;
for (int i = 0; i < A.Length; i++)
{
if(A[i] > largestNumber)
{
largestNumber = A[i];
}
}
int strokeCount = 0;
for (int i = 0; i <= largestNumber; i++)
{
bool highestMatch = false;
for (int j = 0; j < A.Length; j++)
{
if (!highestMatch && A[j] >= (i + 1))
{
strokeCount++;
highestMatch = true;
}
else
{
if (highestMatch && A[j] < (i + 1))
{
highestMatch = false;
}
}
}
}
if(strokeCount > 1000000000)
{
return -1;
}
else
{
return strokeCount;
}
}
嘗試http://codereview.stackexchange.com – DLeh
一嵌套的for循環看起來並不像O(N)複雜 – DLeh
爲什麼你5招爲天際線?你能畫出你爲這個例子做的筆畫嗎?我不太瞭解問題描述。 – poke