和為s的兩個數字 力扣

2021-10-05 19:54:08 字數 1162 閱讀 1303

原題鏈結

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[2,7] 或者 [7,2]

示例 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...