两数之和
给定一个数组 n 以及一个目标值 t ,从数组中找到相加等于 t 的两个数字索引
暴力法
解题思路
双层循环,时间复杂度 O(n^2)
public int [] towSum(int [] n,int t){
if(n.length<2){
return new int[]{};
}
int [] result=new int [2];
for(int i=0;i<n.length;i++){
for(int j=i+1;j<n.length;j++){
if(n[i]+n[j]==t){
result[0]=i;
result[1]=j;
return result;
}
}
}
return new int[0]{};
}
空间换时间
解题思路
使用一个hash存储循环过的值,时间复杂度 O(n)
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> cache=new HashMap();
for(int i=0;i<nums.length;i++){
int key=target-nums[i];
Integer inx=cache.get(key);
if(inx!=null){
return new int[]{inx,i};
}
cache.put(nums[i],i);
}
return new int[]{};
}