解题思路1(暴力破解):
该题主要是想要返回一个加等于target的下标的,用了另外一个数组进行储存,我们第一个想法是通过 暴力的方法让一个数组指针指向一个数,另外一个数组的指针指向该指针的后面的一个位置。然后让第二个指针去遍历后面的位置每一次都和前面的那个指针所指的数进行相加。如果等于target就装入返回的数组里面,并且进行返回。
源代码
public class Solution {
public int[] TwoSum(int[] nums, int target) {
int[] TwoSum = new int[2];
for(int i = 0; i<nums.Length ;i++){
for(int j = i+1;j<nums.Length;j++){
if(nums[i] + nums[j] == target){
TwoSum[0] = i;
TwoSum[1] = j;
return TwoSum;
}
}
}
return null;
}
}
解题思路2(哈希表法)
利用字典的特性进行解题,利用字典的构建一个哈希表。因为我们要返回的数组的下标,所以将数组的下标设置为字典的value的值,将nums的数据设置为key,然后让target减去key,再去用字典的Containskey的方法查询是否有这个差值。如果数组的两个数字就加一个判定即可。
源码:
public int[] TwoSum(int[] nums, int target)
{
int[] TwoSum = new int[2];
int diff = 0;
//定义一个字典,哈希表的用途
Dictionary<int, int> map = new Dictionary<int, int>();
//将所有元素装入字典内
for (int i = 0; i < nums.Length; i++)
{
if (map.ContainsKey(nums[i]))
{
if (target == nums[i] * 2)
{
TwoSum[0] = map[nums[i]];
TwoSum[1] = i;
return TwoSum;
}
else
{
continue;
}
}
//因为要返回的是数组的下标,所以key就是数组里面的元素,value是数组下标
map.Add(nums[i], i);
}
//每个值都与哈希表的钥匙相减,如果相减之后的值在字典的key是存在的,并且不等于自己,那么就可以进行返回
for (int j = 0; j < nums.Length; j++)
{
diff = target - nums[j];
//ContainsKey方法是查询该值是在key里面存在
if (map.ContainsKey(diff) && map[diff] != j)
{
TwoSum[0] = j;
TwoSum[1] = map[diff];
return TwoSum;
}
}
return null;
}