两数之和
-
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。 -
示例
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解法一
- 暴力解法
遍历数组当遇到nums[i]+nums[j]==target时,返回下标 i,j;
public static int [] twoSum(int []nums,int target)
{
for(int i =0;i<nums.length;i++) {
for(int j = i+1;j<nums.length;j++) {
return new int[] {i,j};
}
}
return nums;
}
解法二
1. *ArrayList解法
同样是暴力查找,利用Java中Arraylist中的Contains()、IndexOf()等方法来实现。
import java.util.ArrayList;
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
if(list(nums[i])){
res[0]=list.indexOf(nums[i]);
res[1]=i;
}
list.add(target-nums[i]);
}
return res;
}
}
2. 常用ArrayList方法总结
1、构建ArrayList
1.不初始化起容量
ArrayList al = new ArrayList();//默认容量为0,当数组容量满时数组会自动一当前数组容量的2倍扩容
2.初始化容量
ArrayList al = new ArrayList(3);//初始容量为3
3.以一个集合或## 标题数组初始化
ArrayList al = new ArrayList(a);//a为集合或数组
2、添加元素
1.//.add(object value)
ArrayList al = new ArrayList();
al.add(“a”);
2.将元素插入到索引处(不过其有一定的限制性,必须在数组长度以内插入数组)
al.insert(int index,object value);
3、删除元素
al.Remove(object obj);//移除数组中的obj元素
al.RemoveAt(int index);//移除索引为index的数字元素
al.RemoveRange(int indext,int count);//移除从索引index开始,移除count个元素
4、查找元素
1、Contains()
//boolean contains(Object o)
al.Contains(object obj);//查找数组中是否有obj元素,返回类型为boolean存在返回true;
2、IndexOf()
//int indexOf(Object o)
al.IndexOf(object obj)
;//从0开始查找obj元素,只第一个obj元素,并返回起在数组中的位置,如果不存在,返回-1;al.IndexOf(object obj, int startIndex);
//从startIndex开始查找obj元素,只第一个obj元素,并返回起在数组中的位置,al.IndexOf(object obj, int startIndex, int count);
//从startIndex开始想后查找count个元素,如果存在obj元素,则返回其在数组中的位置
解法三
HashMap解法
import java.util.HashMap;
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
res[0]=map.get(nums[i]);
res[1]=i;
}
map.put(target-nums[i], i);
}
return res;
}
}
.
使用的HashMap方法
1.if(map.containsKey(nums[i]))
containsKey(Object key)检测该映射中是否存在指定key的映射,有则返回true;没有则返回false
containsValue(Object value)检测该映射中是否存在指定value的映射,有则返回true;没有则返回false
2、map.put(target-nums[i], i);
put(K key, V value) 将键(key)/值(value)映射存放到Map集合中,利用put()方法去添加元素时,元素的key不能重复,如果重复,则一定覆盖原先的value值