两数之和C#写法
题目要求:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
1.暴力法 通过两层for循环对target 进行查找
public class Solution {
public int[] TwoSum(int[] nums, int target)
{
for(int a=0;a<nums.Length;a++)
{
for(int b=a+1;b<nums.Length;b++)
{
if(target==nums[a]+nums[b])
{
return new int[] {a, b};
}
}
}
return new int[]{0, 0};
}
}
2.通过字典的方法(哈希表),键和值进行匹配。将键设置为数组的数值,值做为出现的次数。
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++)
{
//判断数组元素是否重复出现,且数值之和刚好等于target
if(dic.ContainsKey(nums[i]))
{
if(nums[i]*2==target){
return new int[]{dic[nums[i]],i};
}
}
else{
dic.Add(nums[i],i);
}
}
for(int x=0;x<nums.Length;x++)
{
int cha=target-nums[x];
//判断字典中是否存在这个键且不能是当前的键
if(dic.ContainsKey(cha)&&dic[cha]!=x){
return new int[]{dic[cha],x};
}
}
return new int[]{0,0};
}
}