小白刷leetecode(1)两数之和
第一题
1.暴力解法,时间复杂度O(n^2),空间复杂度O(n)。
class Solution {
public int[] twoSum(int[] nums, int target) {
int [] res = new int[2];
for(int i = 0; i < nums.length - 1; i++)
{
for(int j = i + 1; j < nums.length; j++)
{
if(nums[i] + nums[j] == target)
{
res[0] = i;
res[1] = j;
return res;
}
}
}
return res;
}
}
- 使用了hashmap、时间复杂度O(n),空间复杂度O(n)。
HashMap常用方法.
class Solution {
public int[] twoSum(int[] nums, int target) {
int [] res = new int[2];
if(nums == null || nums.length == 1) return res;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; i++)
{
int num = nums[i];
int val = target - num;
if(map.containsKey(val))
{
res[0] = i;
res[1] = map.get(val);
return res;
}
else
map.put(num,i);
}
return res;
}
}