劍指Offer57陣列 和為s的兩個數字

2021-10-10 11:39:32 字數 1048 閱讀 3735

題目:

輸入乙個遞增排序的陣列和乙個數字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、 hashset,遍歷陣列,判斷set中是否已經存在目標值target - num[i],沒有就存進去。

2、 由於陣列有序,使用首尾雙指標,向中間移動。①nums[i] + nums[j] == target: 找到一對,直接返回;②nums[i] + nums[j] < target: , 保留 nums[j], i 加 1,向右邊移動;③nums[i] + nums[j] > target:保留 nums[i], j 減 1,向左邊移動。

思路1 時間複雜度o(n),空間複雜度o(n)

class

solution

setset =

newhashset

();for

(int num : nums);}

else

}return

newint[0

];}}

思路2 時間複雜度o(n),空間複雜度o(1)

class

solution

int i =0;

int j = nums.length -1;

int[

] result =

newint[2

];while

(i < j)

else

if(nums[i]

+ nums[j]

< target)

else

}return

newint[0

];}}

《劍指offer》 57 和為S的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。先遍歷每個元素,在做差,看看差值在不在裡面,因為陣列是排序過的,所以乘積較小的肯定就是離得最遠的,python 的話還是很方便的 coding utf 8 class so...

劍指offer 57 和為S的數字

和為 s 的連續正整數序列 輸入乙個陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s 如果有多對數字的和等於 s 則輸出任意一對即可 例如 輸入陣列 和數字 15。由於 4 11 15 因此 輸出 4 和 11 排序 利用兩個指標 left right class solution 輸入乙...

劍指offer 57 和為S的兩個數

題目一 這道題題目為 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。解題思路分為三個步驟 1 對於已經排好序的陣列,先在陣列裡隨機選擇兩個數字,如果它們的和正好等於s,則輸出這兩個數字。2 如果隨機選擇的兩個數字和小於s,可...