leetcode 第18题 4Sum

来源:互联网 发布:网络延时英文 编辑:程序博客网 时间:2024/06/06 01:49

        这个题和之前的题挺相似的,我首先想到的是直接用上以前的方法,先确定一个数(用循环实现),然后用3Sum的方法做,其实每种方法都大同小异啦~

        这里涉及到一个 sort 函数的用法,详细学习链接为:sort用法

bool cmp(const int&a, const int&b){return a < b;}class Solution{public:    vector<vector<int>> fourSum(vector<int>& nums, int target){int len = nums.size();int i;int j;int k;int l;vector<vector<int>> result;vector<int> temp;if(len < 4)return result;sort(nums.begin(), nums.end(), cmp);for(i=0; i<len-3; i++){for(j=i+1;j<len-2;j++){k = j+1;l = len-1;while(k<l){if(nums[i] + nums[j] + nums[k] + nums[l] == target){temp.push_back(nums[i]);temp.push_back(nums[j]);temp.push_back(nums[k]);temp.push_back(nums[l]);result.push_back(temp);temp.clear();while(k < l && nums[k] == nums[k+1])k++;while(k < l && nums[l] == nums[l-1])l--;}if(nums[i] + nums[j] + nums[k] + nums[l] < target){k++;}else{l--;}}while(j < len - 2 && nums[j] == nums[j+1])j++;}while(i < len - 3 && nums[i] == nums[i+1])i++;}return result;}};


原创粉丝点击