1. 程式人生 > >[理解leetcode解法]1.TwoSum 兩數之和

[理解leetcode解法]1.TwoSum 兩數之和

1.TwoSum 兩數之和

題目忘記複製了 - -...

bool lessthan(const pair<int, int>& lhs, const pair<int, int>& rhs) {     if (lhs.first == rhs.first)           return lhs.second < rhs.second;     return lhs.first < rhs.first; }    //1 class Solution { public:     vector<int> twoSum(vector<int> &numbers, int target) {         vector<pair<int, int>> vnum;    //2
        for (size_t i = 0; i < numbers.size(); i++) {             vnum.push_back(make_pair(numbers[i], i + 1));         }         sort(vnum.begin(), vnum.end(), lessthan);         vector<int> ans;         int s = 0, e = vnum.size() - 1;         while (s < e) {  //3             if (vnum[s].first + vnum[e].first == target) {                 ans.push_back(min(vnum[s].second, vnum[e].second));                 ans.push_back(max(vnum[s].second, vnum[e].second));                 break;             }             else if (vnum[s].first + vnum[e].first > target)                 e -= 1;             else                 s += 1;         }         return ans;     } }; 
//1: vector第三個引數,lessthan函式,函式體內實現你想要排序的演算法,這裡是如果lhs的vnum的第一個元素(即value)小於rhs的vnum的第一個元素,那麼則返回true,若第一個元素相同,則比較第二個元素(即位置數i)
//2: vector,C++容器 (1)標頭檔案#include<vector> (2)建立vector<int> vec; (3)尾部插入字:vec.push_back(a); (4)使用下標訪問元素 (5)使用迭代器訪問元素 (6)插入元素:vec.insert(vec.begin()+i,a);在第i+1個元素前面插入a (7)刪除元素:vec.erase(vec.begin()+2);刪除第3個元素 (8)向量大小:vec.size() (9)清空:vec.clear() vector演算法(#include<algorithm>): (1)reverse(vec.begin(),vec.end()); (2)sort(vec.begin(),vec.end(),lessthan);//預設升序 pair<int,int> (1)當需要返回兩個數的時候,就例如這個類裡面的vnum,需要第一個元素value和第二個元素num位置 (2)make_pair跟賦值一樣
//3
這個s++和e--的,只有在當一種解法的時候才可用,不然ans不按從小到大順序排序。