gpt4 book ai didi

go - 两个排序数组中第 k 个最高的

转载 作者:IT王子 更新时间:2023-10-29 02:32:17 25 4
gpt4 key购买 nike

我是 Go 的新手,我遇到了我确定是初学者的错误。我在减去的所有地方都收到错误 invalid identifier character U+2013。我是不是有些没有正确使用算术运算符?我也收到错误 unexpected name, expecting semicolon or newline or non-declaration statement outside function body 但我不太确定是什么原因造成的。问题似乎主要出在 for 循环上方的 if 语句中。我认为这是因为我正在重新分配已经声明的变量,但事实并非如此。任何帮助将不胜感激,如果有人有一些调试 Go 的一般技巧,那也很好。

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
}

最佳答案

U+2013 (或“–”)是“-”(或 U+2d)的奇特版本,适用于喜欢排版的人。如果你在键盘上输入破折号,你会得到正确的字符,如果你从网站、文字处理器或电子邮件中复制了一些东西,它可能会被“有用”地替换为错误的破折号,这是 Go 不理解的。这也经常发生在双引号字符上。

您应该能够在文本编辑器或 IDE 中搜索和替换花式破折号。

关于go - 两个排序数组中第 k 个最高的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46137083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com