赞
踩
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n^2) 的算法吗?
#include "uthash.h"
struct my_struct {
int id; /* we'll use this field as the key */
char name[10];
UT_hash_handle hh; /* makes this structure hashable */
};
struct my_struct *g_users = NULL;
struct my_struct *find_user(int user_id)
{
struct my_struct *s = NULL;
HASH_FIND_INT(g_users, &user_id, s);
return s;
}
void add_user(struct my_struct *s)
{
HASH_ADD_INT(g_users, id, s );
}
typedef struct Hash * PtrH;
struct Hash {
int val;
int key;
UT_hash_handle hh;
};
PtrH hash;
PtrH find(int key)
{
PtrH temp;
HASH_FIND_INT(hash, &key, temp);
return temp;
}
void insert(int key, int val)
{
PtrH judge = find(key);
if (judge == NULL)
{
PtrH temp = (PtrH *) malloc(sizeof(struct Hash));
temp->key = key;
temp->val = val;
HASH_ADD_INT(hash, key, temp);
}
else {
judge->val = val;
}
}
/** * Note: The returned array must be malloced, assume caller calls free(). */ typedef struct Hash * PtrH; struct Hash { int val; int key; UT_hash_handle hh; }; PtrH hash; PtrH find(int key) { PtrH temp; HASH_FIND_INT(hash, &key, temp); return temp; } void insert(int key, int val) { PtrH judge = find(key); if (judge == NULL) { PtrH temp = (PtrH *) malloc(sizeof(struct Hash)); temp->key = key; temp->val = val; HASH_ADD_INT(hash, key, temp); } else { judge->val = val; } } int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int * results = NULL;//The returned array hash = NULL;//hashTable PtrH temp; int i;//loop var for (i = 0; i < numsSize; i++) { temp = find(target - nums[i]); if (temp != NULL) { results = (int *) malloc(sizeof(int)*2); results[0] = i; results[1] = temp->val; * returnSize = 2; return results; } insert(nums[i], i); } * returnSize = 0; return results; }
这是力扣题库中的第一道题,本来用暴力也是可以求出来的,但是很显然这不是我们做题的目的,我们的目标应该是更快,更省,更优,因此,哈希表是很不错的选择,将时间复杂度降到了 O(n) ,大家可以继续思考下:怎么样可以让内存的消耗更小?
有问题欢迎各位大佬指出
力扣系列将持续更新,欢迎关注,一起学习
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。