numstarget
你可以假设每种输出只会对应一个答案。但是,数组中同一个元素不能使用两边。
示例:
给定nums = [2, 7, 11, 15], target = 9
因为nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0,1]
解答
C语言
暴力方法,内外循环
#include <stdio.h>
int *findTwoNums(int *nums, int size, int target) {
int i, j;
int *ret = NULL;
for(i=0;i<size;i++) {
for(j=i+1;j<size;j++){
if(target == nums[i] + nums[j]) {
ret =(int *)malloc(sizeof(int) * 2);
ret[0] = i;
ret[1] = j;
return ret;
}
}
}
return ret;
}
int main(void) {
int a[] = {2, 7, 11,15};
int b = 4;
int c = 9;
int *out = findTwoNums(a, b, c);
printf("1=%d,2=%d\n", out[0], out[1]);
return 0;
}
golang
暴力方法,内外循环
package main
import (
"fmt"
)
func main() {
var ff = [] int {1, 3, 5, 7, 9}
target := 16
out := findTwoNums(ff, target)
fmt.Printf("it is %d and %d \n", out[0], out[1])
}
func findTwoNums(nums [] int, target int) [2] int {
for i := 0; i < len(nums); i++ {
for j := i+1; j < len(nums); j++ {
if nums[i] + nums[j] == target {
return [2] int {i, j}
}
}
}
return [2] int {}
}
利用map,将nums的下标和值分别作为value和key存储到map中。在遍历中寻找map中是否有target-value的key
package main
import (
"fmt"
)
func main() {
var ff = [] int {1, 3, 5, 7, 9}
target := 16
out := findTwoNums(ff, target)
fmt.Printf("it is %d and %d \n", out[0], out[1])
}
func findTwoNums(nums [] int, target int) [2] int {
m := map[int]int{}
for i, v := range nums { //i为下标,v为值
if k, ok := m[target - v]; ok {
return [2]int{k, i}
}
m[v] = i //map下标为nums的值,存储的值为nums的下标
}
return [2]int{}
}