两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
最开始的思路便是,可以用两个for循环去查找满足条件的两个值,返回索引即可
public int[] TwoSum(int[] nums, int target) {
int[] ans = new int[2];
for(int i = 0; i < nums.Length;i++)
{
int a = nums[i];
for(int j = i+1; j <nums.Length;j++)
{
int b = nums[j];
if(a+b == target)
{
ans[0] = i;
ans[1] = j;
}
else
{}
}
}
return ans;
}
但这时间复杂度实在太高~所以有没有更快的方式呢?
当然,看了下问题描述,只需要返回一组数组就可以,那可以用哈希表进行遍历查找。
key为存入字典的nums数值,value为对应下标,如果找到target对应的数值,就返回首次满足target的下标组。
public class Solution {
public int[] TwoSum(int[] nums, int target) {
Dictionary<int,int> dic = new Dictionary<int,int>();
for(int i = 0; i <nums.Length;i++)
{
int imp = target - nums[i];
if(dic.ContainsKey(imp)&&dic[imp] != i)
{
return new int[]{i,dic[imp]};
}
if(!dic.ContainsKey(nums[i]))
{
dic.Add(nums[i],i);
}
}
return new int[]{0,0};
}
}