题目要求不要用两个for语句,会超出时间限制
func sum(n []int, t int) int {
r := make(map[int]int)
for k, v := range n {
if _, ok := r[t-v]; ok == true {
fmt.Println(r[t-v], k)
return 0
} else {
r[v] = k
}
}
return 0
}r的操作是生成哈希表,k是代表第几个数,v代表该数的值
判断语句中因为哈希表的返回值就等于r[t-v],所以没必要保留,用__代替
如果之前的数哈希表有过记录,即ok为true,则输出并退出函数,无记录则记录并进入下一个数的循环
func main() {
s := bufio.NewScanner(os.Stdin)
s.Scan()
input := s.Text()
u := strings.Split(input, " ")
var numbers []int
for _, uu := range u {
num, _ := strconv.Atoi(uu)
numbers = append(numbers, num)
}
fmt.Scan(&target)
sum(numbers, target)
}因为输入的整数的个数是不确定的,所以可用字符串表示,再转化成整数
u表示一个装有去掉空格的各个字符串的切片(如输入2 7 9 11,则u为[2,7,9,11])
for语句因为不需要下标值,所以用__,代替
第八行则是将每个切片的字符串转化为整数并存入num中,__ ,处是防止转化的数不是整数,对于这道题不需要,故用__,替代