Leetcode第一题:给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
解法1:
暴力解法:采用两层嵌套循环;
时间复杂度:O(n^2)
空间复杂度:O(1)
class Solution
{
public int[] twoSum(int[] nums, int target)
{
for(int i=0;i<nums.length-1;i++)
{
for(int j=i+1;j<nums.length;j++)
{
if(nums[i]+nums[j]==target)
{
return new int[]{i,j};
}
}
}
return new int[0];
}
}
解法2:
采用哈希表
利用空间复杂度的消耗来换取时间复杂度的缩短;
算法解析:先将第一个值默认放进哈希表的第一个位置;之后的每一个插入值需要通过计算目标值减去插入值的差值是否包含在之前放进的哈希表中,如果不在,则将插入值放进哈希表的下一个位置;如果在,则返回数组相应下标,完成目标任务。
时间复杂度:O(n);
空间复杂度: O(n);
class Solution
{
public int[] twoSum(int[] nums, int target)
{
Map<Integer,Integer> hashtable = new HashMap<Integer,Integer>();
hashtable.put(nums[0],0);
for(int i=1;i<nums.length;i++)
{
if(hashtable.containsKey(target-nums[i]))
{
return new int[]{hashtable.get(target-nums[i]),i};
}
hashtable.put(nums[i],i);
}
return new int[0];
}
}