力扣刷题(持续更新)
两数之和
链接https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/
描述:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
题解
方法一:暴力破解
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *tar=(int*)malloc(sizeof(int)*2);
tar[0]=0;
tar[1]=0;
for(int i=0;i<numsSize-1;i++){
for(int j=i+1;j<numsSize;j++){
if(target==(nums[i]+nums[j])){
tar[0]=i;
tar[1]=j;
*returnSize=2;
return tar;
}
}
}
return 0;
}
方法二:哈希表
哈希表:简而言之就是H(key)=a*key+b(其中a,b为常常数)
其中map的泛型不能用int,因为int不是泛型
关于什么是哈希表及构造方法:https://blog.csdn.net/u011109881/article/details/80379505
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> mp=new HashMap<>();
for(int i=0;i<nums.length;i++){
mp.put(nums[i],i);
}
for(int i=0;i<nums.length;i++){
int com=target-nums[i];
if(mp.containsKey(com)&&mp.get(com)!=i){
return new int[] {i,mp.get(com)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
}
}
}