Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
我的daim
/** * Note: The returned array must be malloced, assume caller calls free(). */int* twoSum(int* nums, int numsSize, int target) { int i,j,mark = 0,minus = 1; if(target < 0) minus = -1; int *indices = (int*)malloc(sizeof(int) * 2); for(i=0;iminus * target) continue; for(j=i+1;j != i && j
别人的代码,将之前访问过的元素存在数组中,O(n),虽然很快,但是正式的做法应该是存在Hash表里面。
int* twoSum(int* nums, int numsSize, int target) { int _[100001] = {0}, *index_plus_one = _ + 50000; for (int i = 0; i < numsSize; i++) { int rest = target - nums[i]; if (index_plus_one[rest]) { int *ans = malloc(sizeof(int) * 2); ans[0] = i; ans[1] = index_plus_one[rest] - 1; return ans; } else index_plus_one[nums[i]] = i + 1; } return NULL;}