public class Solution_1 {
// 蛮力法
public int[] twoSum_1(int[] nums, int target) {
int[] result = {-1, -1};
// 从0位置去每一个数来和后面的是相加
for(int i=0; i<nums.length; i++){
// 从末尾去到i去一个数作为第二个数
for(int j=nums.length-1; j>i; j--){
if(nums[i]+nums[j]==target){
result[0] = i;
result[1] = j;
}
}
}
return result;
}
// 通过map来降低复杂度
public int[] twoSum(int[] nums, int target) {
int[] result = {-1, -1};
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i<nums.length; i++){
// 通过计算得出查找哪个数
int complement = target - nums[i];
// 查找这个数之前是否有complement
if(map.containsKey(complement)){
result[0] = i;
result[1] = map.get(complement);
return result;
}
// 上述操作无结果,将i放入map中
map.put(nums[i], i);
}
return result;
}
@Test
public void test(){
Solution_1 solution = new Solution_1();
int[] nums = {1, 4, 7, 11, 2, 15};
int target = 8;
int[] result = solution.twoSum(nums, target);
System.out.println(Arrays.toString(result));
}
}
1、ArrayList 有序集合底层为数组按下标查找快 增删慢 按元素查找、增删都慢。
2、LinkedList 有序集合底层为链表按下标查找慢 增删快 按元素查找慢 增删比arrayList快。
3、HashMap 无序哈希表 底层哈希表 按下标查找一般比LinkedList快 增删快跟主体大小有关。
按元素查找快 增删快跟主体大小有关,越大越慢。
所以在第二种方法中使用中选择存放在HashMap中。