算法_云邊有個稻草人的博客-CSDN博客
目錄
解法一:暴力算法
解法二:雙指針(時間復雜度為O(N))
【代碼編寫】
LCR 179. 查找總價格為目標值的兩個商品 - 力扣(LeetCode)
解法一:暴力算法
用兩個for循環,列出所有的兩個數的和進行判斷,時間復雜度為O(N^2),不推薦。
算法流程:兩層 for 循環外層 for 循環依次枚舉第?個數 a ;內層 for 循環依次枚舉第?個數 b ,讓它與 a 匹配;ps :這?有個魔?細節:我們挑選第?個數的時候,可以不從第?個數開始選,因為 a 前?的數我們都已經在之前考慮過了;因此,我們可以從 a 往后的數開始列舉。 然后將挑選的兩個數相加,判斷是否符合?標值。
class Solution
{
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();for (int i = 0; i < n; i++) { // 第?層循環從前往后列舉第?個數for (int j = i + 1; j < n; j++) { // 第?層循環從 i 位置之后列舉第?個數if (nums[i] + nums[j] == target) // 兩個數的和等于?標值,說明我們已經找到結果了return { nums[i], nums[j] };}}return { -1, -1 };}
};
解法二:雙指針(時間復雜度為O(N))
【代碼編寫】
class Solution
{
public:vector<int> twoSum(vector<int>& price, int target) {int left = 0;int right = price.size()-1;while(left<right){int sum = price[left]+price[right];if(sum > target)right--;else if(sum < target)left++;else return {price[left],price[right]};}//這里對于編譯器,若沒有值等于target要設置一個返回值,讓所有的情況都有所返回return {-1,-1};}
};
完——
繼續。。。