题目
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].
解
class Solution {
public int[] twoSum(int[] nums, int target) {
int twoSum=0;
int[] retArr=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){
retArr[0]=i;
retArr[1]=j;
//这里可以return
return retArr;
}
}
}
return retArr;
}
}
优解(考虑只便利一次数组)
class Solution {
public int[] twoSum(int[] nums, int target) {
int anotherInteger=0;
int[] retArr=new int[2];
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
anotherInteger=target-nums[i];
if(map.containsKey(anotherInteger)){
retArr[0]=map.get(anotherInteger);
retArr[1]=i;
return retArr;
}
map.put(nums[i],i);
}
return retArr;
}
}
小结
- 集合类中元素只能是包装类;
- 遍历数组的时候应该尽量考虑遍历一次的情况;
- HashMap增加元素是push(key,value),List增加元素是add(key);
- 因为是只遍历一次,所以循环的终止条件应该是循环至数组的最后一个元素;
- 可以在if查找到结果的时候就return结果,避免后面不必要的时间浪费。
更多–考虑有多种解的情况
class Solution{
public HashMap<Integer,Integer> twoSum(int[] nums,int target){
//也可使用其它的返回方式
HashMap<Integer,Integer> retMap=new HashMap<Integer,Integer>();
//使用map对数组可以起到去重的作用
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
int anotherInteger=target-nums[i];
if(map.containsKey(anotherInteger)){
if(!map.containsKey(nums[i])){
//解也是去重,以第一个为主
retMap.put(map.get(anotherInteger),i);
}
}
if(!map.containsKey(nums[i])){
//去重,以第一个的下标为主
map.put(nums[i],i);
}
}
return retMap;
}
}
更多小结
//打印去重后的数组
for(Map.Entry<Integer,Integer> entry: map.entrySet){
System.out.println("key= " + entry.getKey() + " and value= "+ entry.getValue());
}