目錄?
1. 題目解析
2. 算法原理
3. 代碼編寫
寫在最后:
1. 題目解析
題目鏈接:劍指 Offer 57. 和為s的兩個數(shù)字 - 力扣(Leetcode)
?這道題題目就一句話但是也是有信息可以提取的,
最重要的就是開始的那句話,“遞增序列”
然后在數(shù)組中找出兩個和為s的數(shù)即可(而且是任意一對即可)
2. 算法原理
這道題很簡單,如果用暴力枚舉直接兩層for循環(huán)搞定就行,
但是使用暴力解法的話,就沒有利用到他是有序序列的這個特性了。
看到有序一般我們會想到用二分法,但是二分比較難寫,
所以我就打算利用單調(diào)性使用雙指針來解這道題:
我們用 left 指針指向左邊,right 指針指向右邊,然后開始操作:
sum 是 left + right 的值,
如果:sum < target ,就讓 left 指針右移找更大的數(shù)
如果:sum > target ,就讓 right 指針左移找更小的數(shù)
如果:sum == target ,返回結(jié)果即可。
3. 代碼編寫
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
vector<int> ans;
while(left < right) {
int sum = nums[left] + nums[right];
if(sum < target) left++;
else if(sum > target) right--;
else {
ans.push_back(nums[left]);
ans.push_back(nums[right]);
break;
}
}
return ans;
}
};
寫在最后:
以上就是本篇文章的內(nèi)容了,感謝你的閱讀。
如果感到有所收獲的話可以給博主點一個贊哦。文章來源:http://www.zghlxwxcb.cn/news/detail-700176.html
如果文章內(nèi)容有遺漏或者錯誤的地方歡迎私信博主或者在評論區(qū)指出~文章來源地址http://www.zghlxwxcb.cn/news/detail-700176.html
到了這里,關于【算法專題突破】雙指針 - 和為s的兩個數(shù)字(6)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!