2013年1月25日 星期五

[C Programming] 最長平台問題


在看一個很基本的最長平台問題。
自己想用比較能跳的方法來做的話,
會變成要時不時的判斷N-n是否大於0......
(N為陣列長度,n為index)
Somehow在C裡面去取超出範圍的index也是會回傳給你一個阿哩布達的東西,
它用指標來看直接吐給你也不會出錯= =......
Java和C++的話可以try-catch,但C沒辦法,
自己實作的話就變成花時間做判斷式,
不過這樣看起來的話try-catch其實也是隱性的判斷式?


回過頭來想字串要留'\0'作結尾真的很有用。

明天整理過後再將寫出來的Code和原版解答PO上來。


自己想的方法有些不理想,就把原版的解法寫出來好了。
Code大概長這樣:

// Complexity is O(n)
int longest_pl(int x[], int n)
{
 int len = 1;
 int i;
 for(i = 1; i < n; i++)
  if( x[i] == x[i-len] )
   len++;
 return len;
}

簡單說起來,就是從目前的index來往回推最大長度+1(i-len),
如果說看到的數字跟目前的一樣,代表說這組長度已經比最大長度還長了。
這樣每個數字掃過一遍,就可以得到最長平台的長度。

沒有留言:

張貼留言