Leetcode-16: Pascal's Triangle

xiaoxiao2021-02-28  36

这题比较简单,我就用最基本的方法做的。可能有更好的办法,比如说不需要两重循环?

#include <iostream> #include <algorithm> #include <climits> #include <vector> using namespace std; struct Record { Record(int a, int b, int c) :x(a), y{b}, z(c) {} int x; int y; int z; }; int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); Record record(0,0,0); int min_gap=INT_MAX; for (int i=0; i<nums.size()-2; ++i) { int diff = target - nums[i]; int p1=i+1, p2=nums.size()-1; while(p1<p2) { cout<<"i="<<i<<" p1="<<p1<<" p2="<<p2<<endl; int sum = nums[p1]+nums[p2]; if (abs(diff-sum) < min_gap) { min_gap = abs(diff-sum); record=Record(nums[i], nums[p1], nums[p2]); } if (sum<diff) p1++; else if (sum>diff) p2--; else return target; } } return record.x+record.y+record.z; } int main() { vector<int> S={-1,2,1,-4}; cout<<threeSumClosest(S, 1)<<endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-2621337.html

最新回复(0)