【LeetCode刷題(簡單程度)】劍指 Offer 57. 和為s的兩個數字
輸入一個遞增排序的陣列和一個數字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
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路1: 利用雜湊表,這思路和LeetCode第一題類似,但這樣顯然是沒用到排序好了的這個性質,所以為下策。
class Solution {
public:
unordered_map<int,int> table;
vector<int> res;
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
if(n == 0)
return res;
for(int i = 0;i < n; ++i)
{
table[nums[i]] = i;//儲存下標
}
int index = 0;
for(int i = 0;i < n;++i)
{
int rest = target - nums[i];
if(table.find(rest) == table.end())//說明沒找到與nums[i]相加為target的數
continue;
else
{
index = table[rest];
if(index == i) //排除和自己相加的和為target
continue;
else
{
res.push_back(nums[i]);
res.push_back(nums[index]);
break;
}
}
}
return res;
}
};
思路二:因為陣列是已經排序好的,我們可以使用兩個指標,分別從前和後向中間遍歷,如果這兩個指標所指向的數字的和小於target
,那麼說明我們選取的數字有點偏小,那麼我們將左邊的指標往右移動,反之說明我們選擇的數字過於大了,那麼就將右邊的指標往左邊移動。
class Solution {
public:
vector<int> res;
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
if(n == 0)
return res;
int left = 0;
int right = n - 1;
while(left < right)
{
if(nums[left] + nums[right] > target)
{
right--;
}
else if(nums[left] + nums[right] < target)
{
left++;
}
else
{
res.push_back(nums[left]);
res.push_back(nums[right]);
break;
}
}
return res;
}
};
相關文章
- 《劍指offer》:[41]陣列中和為S的兩個數陣列
- LeetCode-劍指Offer刷題記錄LeetCode
- 劍指offer刷題記錄
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 刷題記錄:劍指offer+遇到的筆試題+LeetCode筆試LeetCode
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 劍指Offer系列刷題筆記彙總筆記
- LeetCode|劍指 Offer 49.醜數LeetCode
- [每日一題] 第十四題:和為s的兩個數字每日一題
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- Leetcode劍指offer(八)LeetCode
- ✏️ JavaScript版 | 10大專題 | 劍指offer刷題筆記 ✏️JavaScript筆記
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 劍指Offer--陣列中重複的數字陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 《劍指offer》:[51]陣列中的重複數字陣列
- 劍指offer面試題11 數值的整數次方面試題
- 【劍指offer】數字在排序陣列中出現的次數排序陣列
- 劍指Offer題解合集
- PHPer也刷《劍指Offer》之連結串列PHP
- 劍指Offer 表示數值的字串字串
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 《劍指offer》:[38]數字在排序陣列中出現的次數排序陣列
- 【劍指offer】字串轉整數字串
- 【劍指offer】二進位制中1的個數
- Leetcode 劍指 Offer 39. 陣列中出現次數超過一半的數字LeetCode陣列
- 劍指offer面試17 合併兩個排序的連結串列面試排序
- 《劍指offer》:[54]表示數值的字串字串
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 劍指Offer-39-數字在排序陣列中出現的次數排序陣列