题目1.Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解题思路:
一、暴力破解法 时间复杂度为O(n^2)。
由题目可知一定存在nums[i]和nums[j],使得nums[i]+nums[j]==target。
采用两次遍历即可,注意j=i+1 是为了访问nums[i]之后的元素。
class Solution {
public int[] twoSum(int[] nums, int target) {
int res[]=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){
res[0]=i;
res[1]=j;
return res;
}
}
}
return res;
}
}
二、HashMap法 时间复杂度为O(n)。
定义map,存储<数值,数值在nums中的索引>,遍历数组nums[],如果map中不存在target-nums[i],则将其put,若存在则从map中取出target-nums[i]对应的索引,最后返回即可。
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)){
map.put(num,i);
}else{
res[0]=i;
res[1]=map.get(val);
return res;
}
}
return res;
}
}