1048 Find Coins

題目

說白了就是從一個序列中找一對數字使它們的和加起來等於一個數

思路

首先進行一次排序,然後使用雙指針法,加起來和如果大於目標,那麼右指針移動,左指針不動,這樣纔能有和等於目標的可能性,同理,當和小於目標時,左指針右移而右指針不動,當和等於目標的時候,跳出循環就可以了,因爲它只要求輸出左邊最小的一個,所以沒有必要移動了

代碼

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


int main() {
    int m,n;
    cin>>m>>n;
    vector<int> coins;
    coins.resize(m);
    for(int i=0; i<m; i++) {
        cin>>coins[i];
    }
    sort(coins.begin(),coins.end());
    int left = 0,right = coins.size()-1;
    int v1 = -1,v2 = -1;
    while(left<right) {
        if(coins[left]+coins[right]>n) {
            right--;
        } else if(coins[left]+coins[right]==n) {
            v1 = coins[left];
            v2 = coins[right];
            break;
        } else {
            left++;
        }
    }

    if(v1==-1&&v2==-1) {
        cout<<"No Solution";
    } else {
        cout<<v1<<" "<<v2;
    }
    return 0;
}

??正文結束??
發佈了153 篇原創文章 · 獲贊 16 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章