2017-09-10 97 views
0

我是新手,我遇到了我肯定是初學者錯誤。看起來我在減去任何地方都會看到一個錯誤invalid identifier character U+2013。我是一些如何不正確使用算術運算符?我也收到錯誤unexpected name, expecting semicolon or newline or }non-declaration statement outside function body,但我不太確定是什麼原因造成的。它主要看起來像是我的if語句在for循環之上。我認爲這是因爲我正在重新分配已經聲明的變量,但似乎並非如此。任何幫助將不勝感激,如果任何人有一些一般的調試技巧,這將是很好的。k'th最高的兩個排序陣列

package main 

import "fmt" 


func main() { 
    a := []int{ 
     13, 14, 15, 16, 17, 
    } 

    b := []int{ 
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
    } 

    k := 8 

    result := kthSmallest(a, b, k) 
    fmt.Printf("%v", result) 

} 

func kthSmallest(a []int, b []int, k int) int { 
    if k >= len(a) + len(b) { 
     fmt.Printf("The range is not large enough") 
     return 0 
    } 

    var lowA, lowB, highA, highB int = 0, 0, k - 1, k - 1 

    if len(a) < k - 1 { 
     highA = len(a) - 1; 
    } 

    if len(b) < k - 1 { 
     highB = len(b) - 1; 
    } 

    if highA + highB < k { 
     return 0; 
    } 

    var midA, midB int = 0, 0 
    var result int = 0 

    for k > 0 { 
     midA = lowA + (highA - lowA)/2; 
     midB = lowB + (highB - lowB)/2; 

     if a[midA] >= b[midB] { 

      k = k - (midB - lowB + 1); 
      result = b[midB]; 
      highA = midA - 1; 
      lowB = midB + 1; 

     } else if a[midA] < b[midB] { 

      k = k - (midA - lowA + 1); 
      result = a[midA]; 
      highB = midB - 1; 
      lowA = midA + 1; 

     } 

    } 


    return result 
} 

回答

3

U+2013(或 ' - ')是一個奇特的版本 ' - '(或U+2d)的人誰是大到排版。如果你在鍵盤上輸入一個破折號,你會得到正確的字符,如果你從網站,文字處理器或電子郵件中複製了某些東西,它可能會被「有幫助」地替換,並伴隨着錯誤的短劃線,Go不理解。雙引號字符也會發生這種情況。

您應該能夠在文本編輯器或IDE中搜索並替換花哨的破折號。

+0

好吧,那就做到了。謝謝! – tim

+0

我已經更新了我的代碼,但我仍然有點麻煩。當'k'的值設置爲2到6時,它似乎工作,但當它設置爲1時,'result'設置爲0,當它應該是1.當設置爲7時,'result'是3並將其設置爲高於7時,執行超時。我完全在看我的邏輯錯誤嗎? – tim

+0

我想通了。再次感謝。 – tim