看似是一道简单的题,使用双层for循环,依次取值,和之后的值依次相加,知道和为期望值sh时输出,时间复杂度O(n²)
public int[] twoSum(int[] nums, int target) {
int result[] = new int[2];
int length = nums.length;
for (int i = 0; i < length; i++){
for(int j = i+1; j<length;i++)
{
if(nums[i] + nums[j] == target){
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
}
结果性能截图
上网搜的高性能算法,遍历一遍数组后就可以获得结果,思路初始化一个map,key为数组的值,value为数组的角标,一次取值v,如果Map.get(target-v)存在,则返回,否则将其值放入map,减少了比较的算法和一层for循环
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
int arr[]= new int[2];
int len = nums.length;
for(int i = 0; i< len;i++){
if(map.get(target-nums[i]) != null && map.get(target-nums[i]) >= 0)
{
arr[0] = map.get(target-nums[i]);
arr[1] = i;
return arr;
}else{
map.put(nums[i],i);
}
}
return arr;
}
性能截图