看似是一道簡單的題,使用雙層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;
}
性能截圖