题目链接
https://leetcode-cn.com/problems/two-sum/
思路
1:暴力法,时间复杂度o(n^2) 空间复杂度o(1)
public int[] twoSum(int[] nums, int target) {
if(nums == null || nums.length == 0){
return new int[]{};
}
for(int i = 0 ; i < nums.length; i++){
for(int j = i+1; j < nums.length; j++){
if(nums[i] + nums[j] == target){
return new int[]{i,j};
}
}
}
return new int[]{};
}2: HashMap表法 时空复杂度 o(n) o(n)
//存储数值和下标
//以后缓存都叫cache吧
Map<Integer,Integer> cache = new HashMap<>();
public int[] twoSum(int[] nums, int target) {
//进来先判断参数
if(nums == null || nums.length == 0){
return new int[]{};
}
for(int i = 0; i < nums.length; i++){
//假定如果已经存在,直接返回当前的索引,再根据key取之前的值索引返回
if(cache.containsKey(target - nums[i])){
return new int[]{i,cache.get(target - nums[i])};
}
//不存在一直追加呗
cache.put(nums[i],i);
}
return new int[]{};
}


京公网安备 11010502036488号