原題鏈結
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。
示例 1:
輸入:nums = [2,7,11,15], target = 9示例 2:輸出:[2,7] 或者 [7,2]
輸入:nums = [10,26,30,31,47,60], target = 40限制:輸出:[10,30] 或者 [30,10]
1 <= nums.length <= 10^5方法一:1 <= nums[i] <= 10^6
遍歷陣列,求出目標數和每個數的差,通過 hashmap 搜尋是否出現過符合條件的數字。若有則加入到返回的陣列中,否則加入 map 中。方法二:
採用雙指標的方法,初始的時候分別指向陣列的左右兩端,定義sum=nums[left]+nums[right];若targetsum,則指標 left 右移,即left++;若 target==sum,則返回陣列 [nums[left], nums[right]];
否則返回空陣列,代表無和為 targettarget 的數字組合。
class
solution
// mapmap=new hashmap<>();
// for(int i=0;i
// int num=target-nums[i];
// if(map.containskey(num))
// map.put(nums[i], i);
// }
// return res;
//方法二
int left=
0,right=nums.length-1;
while
(leftelse
if(target>sum)
else;}
}return
newint[0
];}}
和為S的兩個數字
題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸入 每個測試案例包括兩行 第一行包含乙個整數n和k,n表示陣列中的元素個數,k表示兩數之和。其中1 n 10 6,k為int 第二行包含n個整數,每個陣列均為i...
和為S的兩個數字
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。class solution public vectorfindnumberswithsum vectorarray,i...
和為s的兩個數字
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。include using namespace std bool twonumberwithsum int data,i...