每日一題系列(day 16)
前言:
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
?? ????如果說代碼有靈魂,那么它的靈魂一定是????算法????,因此,想要寫出??優(yōu)美的程序??,核心算法是必不可少的,少年,你渴望力量嗎????,想掌握程序的靈魂嗎???那么就必須踏上這樣一條漫長的道路????,我們要做的,就是斬妖除魔????,打怪升級!????當然切記不可??走火入魔??,每日打怪,拾取經驗,終能成圣????!開啟我們今天的斬妖之旅吧!????
題目:
??購物車內的商品價格按照升序記錄于數(shù)組 price。請在購物車中找到兩個商品的價格總和剛好是 target。若存在多種情況,返回任一結果即可。
示例:
提示:
- 1 <= price.length <= 10^5
- 1 <= price[i] <= 10^6
- 1 <= target <= 2*10^6
思路:
??首先最先想到的肯定是暴力解法,這道題暴力解法很簡單,暴力枚舉即可,時間復雜度是 O(n^2)。
??這里我們可以采用雙指針來解決這道題,一個左指針left指向數(shù)組0位置處,一個右指針right指向數(shù)組最后一個元素下標。而要與target值進行比較,這里有三種情況,一種是大于target值,一種是小于target值,最后就是等于target值。
??1、首先,這是一個升序數(shù)組,當左右指針指向的值相加小于target值,左指針就自增,向后移動,因為是一個升序數(shù)組,所以 左指針向后移動才會可能等于target值。
??2、當左右指針指向的值相加大于targe值,這個時候在向右移動左指針就只會更大,所以這個時候我們移動右指針,控制 右指針向左移動。
??3、兩個數(shù)剛好相等,那么就返回他們兩個的值即可。如果遍歷完了整個數(shù)組卻沒有合適的值,那么就返回0個元素的集合即可。
代碼實現(xiàn):
class Solution {
public:
vector<int> twoSum(vector<int>& price, int target) {
int left = 0, len = price.size();
int right = len - 1;
for(int i = 0 ; i < len ; i++)
{
if((price[left]+price[right]) < target)
{
left++;
}
else if((price[left]+price[right]) > target)
{
right--;
}
else
{
return {price[left], price[right]};
}
}
return {};
}
};
文章來源:http://www.zghlxwxcb.cn/news/detail-769355.html
??其實經過前面這些題的練習,這題的雙指針是很容易就想到的,左右位置的值相加進行比較,再做出對應的行為。文章來源地址http://www.zghlxwxcb.cn/news/detail-769355.html
到了這里,關于每日一題:LeetCode-LCR 179. 查找總價格為目標值的兩個商品的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!