私は新しいです。私は初心者の誤りであると確信しています。私が減算しているところで、一見どこでもエラーinvalid identifier character U+2013
が発生しています。算術演算子を正しく使用しない方法はありますか?私はまた、エラーunexpected name, expecting semicolon or newline or }
とnon-declaration statement outside function body
を取得していますが、私はそれが何を引き起こしているかについてもあまりよく分かりません。主に、forループの上のif文の中に問題があるようです。すでに宣言されている変数を再割り当てしているためだと思っていましたが、そうではありません。どんな助けも非常に高く評価され、誰かがデバッグのための一般的なヒントを持っていればそれも素晴らしいでしょう。2つのソートされた配列のうち、最大の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
}
まあ、それはやるよ。ありがとうございました! – tim
私のコードを更新しましたが、まだ少し問題があります。 'k'の値が2から6に設定されているとうまくいくように見えますが、1に設定されている場合、' result'は1になるように0に設定されます.7に設定すると 'result' 3で7よりも高く設定すると、実行がタイムアウトします。私の論理に誤りがあるのを見ているだけですか? – tim
私はそれを理解しました。再度、感謝します。 – tim